2010-11-02 20 views
16

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?

+1

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

+0

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

+0

zobacz edytowaną odpowiedź tutaj: http: //stackoverflow.com/a/7022137/2469134 –

Odpowiedz

24

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.).

+0

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. –

+6

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? –

+0

Testowałem to i to działa. Dokładnie tego szukałem: zachowanie przycisku dla TableRow. – Lekensteyn

9

W dodatku onclicklistener:

tr1.setBackgroundResource(drawable.list_selector_background); 

Gdzie TR1 jest Twój TableRow. (będziesz musiał przygotować tablerow, aby działał).

+0

dziękuję, ale po naciśnięciu rzędu, zostanie podświetlony, a następnie z powrotem ponownie, aby być podświetlone! –

11

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> 
+0

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. –

0
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) + ""; 
       } 
       } 
     }); 
1
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)); 
      } 
     } 
     //... 
    } 
}; 
+0

jego działanie. układ tabeli wiersza onclick nasłuchiwania i umieść w nim ten kod. – bhruguni

+0

Wielkie dzięki, to rozwiązało mój problem ..... uratowałeś mnie dzisiaj –

Powiązane problemy