Jako moje wymaganie dotyczące projektu muszę podświetlić wiersz tabeli w onClick. Czy jest jakiś sposób to zrobić? Lub zaproponuj mi alternatywę?Jak wyróżnić wiersz tabeli po kliknięciu?
Odpowiedz
Jeśli chcesz użyć akcji na click podświetleniem jak masz z ogólnej ListView, chcesz ustawić tło każdego rzędu, aby być android:background="@android:drawable/list_selector_background"
Oto przykład:
<TableLayout
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:stretchColumns="0">
<TableRow
android:id="@+id/first_row"
android:background="@android:drawable/list_selector_background" >
... row content ...
</TableRow>
</TableLayout>
następnie w kodzie
TableRow firstRow = (TableRow) findViewById(R.id.first_row);
firstRow.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
// TODO: do your logic here
}
}
i powinieneś dostać highlight-stanie wiersz tak jak w ListView ...
EDYCJA: Powyżej znajduje się domyślny selektor tła listy kompozycji. Jeśli chcesz selektor bardziej ogólny (jak selektora projektowania materialnego, gdy użytkownik dotyka wiersz) użyć tego:
android:background="?android:attr/selectableItemBackground"
Również dotyczy to więcej niż tylko TableRows. Powinieneś być w stanie to zrobić na prawie każdym ogólnym widżecie z załączonym onClickListener (TextViews, przyciski, itp.).
Oczywiście nie przetestowałeś tego. Wszystko to polega na ustawieniu koloru tła wiersza tabeli i dodaniu odbiornika kliknięć do wiersza, ** nic ** więcej. –
Przetestowałem go - i jego użycie jest z powodzeniem stosowane w produkcji. Masz rację, TO ustawia tło. To, do czego on służy, jest kluczem - "@android: drawable/list_selector_background" jest standardowym wyróżnieniem motywu telefonu po kliknięciu na wpis w ListView. Co ciekawe, przed odstąpieniem od komentarza zrobiłeś test? –
Testowałem to i to działa. Dokładnie tego szukałem: zachowanie przycisku dla TableRow. – Lekensteyn
W dodatku onclicklistener:
tr1.setBackgroundResource(drawable.list_selector_background);
Gdzie TR1 jest Twój TableRow. (będziesz musiał przygotować tablerow, aby działał).
dziękuję, ale po naciśnięciu rzędu, zostanie podświetlony, a następnie z powrotem ponownie, aby być podświetlone! –
Nawet byłem w obliczu tego samego problemu z pomocą Salil Pandit odpowiedź zanotował niewielką zmianę do niego i że działa na mnie
To TableRow
w xml:
<TableRow
android:id="@+id/tableRow1"
android:layout_width="wrap_content"
android:layout_height="0dp"
android:layout_weight="1"
android:padding="5dip"
android:background="@drawable/selector">
To jest selector.xml
w res\drawable
folderu
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android" >
<item android:state_focused="true"
android:state_pressed="true"
android:drawable="@android:drawable/list_selector_background"></item>
<item android:state_focused="true"
android:state_pressed="false"
android:drawable="@android:drawable/list_selector_background"></item>
<item
android:state_focused="false"
android:state_pressed="true"
android:drawable="@android:drawable/list_selector_background" />
<item android:drawable="@android:drawable/list_selector_background"></item>
</selector>
udało się śledzić, ale pamiętaj, że podczas tworzenia selektora w folderze do rysowania utwórz plik selector.xml jako zasób do pobrania. –
String _row_selected = null;
boolean _is_selection_even = false;
private TableLayout TL;
TableRow row_data = new TableRow(this);
row_data.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if (_row_selected != null) {
if (Integer.parseInt(_row_selected) == TL.indexOfChild(v)) {
if (_is_selection_even) {
TL.getChildAt(Integer.parseInt(_row_selected)).setBackgroundColor(0xFF00FF00);
_is_selection_even = false;
} else {
TL.getChildAt(Integer.parseInt(_row_selected)).setBackgroundColor(Color.WHITE);
_is_selection_even = true;
}
} else {
TL.getChildAt(Integer.parseInt(_row_selected)).setBackgroundColor(Color.WHITE);
v.setBackgroundColor(0xFF00FF00);
_row_selected = null;
_row_selected = TL.indexOfChild(v) + "";
}
} else {
v.setBackgroundColor(0xFF00FF00);
_row_selected = null;
_row_selected = summaryTL.indexOfChild(v) + "";
}
}
});
private OnClickListener tablerowOnClickListener = new OnClickListener()
{
public void onClick(View v)
{
//Highlight selected row
//Highlight selected row
for (int i = 1; i < tblItemDetail.getChildCount(); i++)
{
View row = tblItemDetail.getChildAt(i);
if (row == v)
{
row.setBackgroundColor(getResources().getColor(android.R.color.holo_red_light));
}
else
{
//Change this to your normal background color.
row.setBackgroundColor(getResources().getColor(android.R.color.transparent));
}
}
//...
}
};
jego działanie. układ tabeli wiersza onclick nasłuchiwania i umieść w nim ten kod. – bhruguni
Wielkie dzięki, to rozwiązało mój problem ..... uratowałeś mnie dzisiaj –
Trochę za późno, ale sprawdź odpowiedź na ten wątek: http://stackoverflow.com/questions/6274343/how-to-change-the-background-color-of-a-tablerow-when-phocused – Arnaud
Możesz skierować na [ten link] (http://stackoverflow.com/questions/4410420/onclick-change-tablerow-background-color) odnoszą się do odpowiedzi udzielonej przez Josha Clemma. – prateek
zobacz edytowaną odpowiedź tutaj: http: //stackoverflow.com/a/7022137/2469134 –