2010-11-02 5 views
16

Als Projektanforderung muss ich die Tabellenzeile auf onClick markieren. Gibt es einen Weg, dies zu tun? Oder bitte schlage mir die Alternative vor?Wie kann ich die Tabellenzeile beim Klicken markieren?

+1

Ein bisschen spät, aber überprüfen Sie die Antwort dieses Threads: http://StackOverflow.com/Questions/6274343/How-to-change-the-background-color-of-a-Tablerow-when-fokussiert – Arnaud

+0

Sie können sich beziehen zu [diesem Link] (http://stackoverflow.com/questions/4410420/onclick-change-tablerow-background-color) siehe die Antwort von Josh Clemm. – prateek

+0

finden Sie die bearbeitete Antwort hier: http: //stackoverflow.com/a/7022137/2469134 –

Antwort

24

Wenn Sie das Lager auf Klick Highlight verwenden möchten, wie Sie mit einem allgemeinen Listview bekommen, wollen Sie den Hintergrund jeder Zeile setzen android:background="@android:drawable/list_selector_background"

Hier zu sein ist ein Beispiel:

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

dann im Code,

TableRow firstRow = (TableRow) findViewById(R.id.first_row); 
firstRow.setOnClickListener(new OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      // TODO: do your logic here 

     } 
} 

Und Sie sollten eine Highlight-able Reihe wie in einem Listview ...

erhalten

EDIT: Oben wird Ihnen die Liste Hintergrund-Auswahl des Standardthemas geben. Wenn Sie den allgemeineren Selektor (wie das Materialdesign Selektor, wenn der Benutzer eine Zeile berührt) wollen Sie mit diesem:

android:background="?android:attr/selectableItemBackground" 

Auch gilt dies für mehr als nur TableRows. Sie sollten dies in fast jedem generischen Widget mit einem angehängten onClickListener (TextViews, Buttons, etc.) tun können.

+0

Sie haben dies offensichtlich nicht getestet. All dies setzt die Hintergrundfarbe der Tabellenzeile und fügt der Zeile einen Klick-Listener hinzu, ** nichts ** mehr. –

+6

Ich habe es getestet - und es wird in der Produktion ziemlich erfolgreich eingesetzt. Du hast recht, es setzt den Hintergrund. Was es festlegt, ist der Schlüssel - der '@android: drawable/list_selector_background' ist das Standard-Highlight des Telefons, wenn Sie auf einen Eintrag in einem ListView klicken. Neugierig, bevor Sie einen Kommentar fallen lassen, haben Sie es getestet? –

+0

Ich habe es getestet und es funktioniert. Genau das habe ich gesucht: Tastenverhalten für eine TableRow. – Lekensteyn

9

Im OnClickListener add:

tr1.setBackgroundResource(drawable.list_selector_background); 

Wo tr1 Ihre TableRow ist. (Sie müssen das letzte Finale machen, damit es funktioniert).

+0

danke, aber wenn ich die Zeile drücke, wird sie markiert und dann wieder zurück, um nicht hervorgehoben zu werden! –

11

Auch wurde ich das gleiche Problem mit Hilfe von salil pandit Antwort mit Blick auf eine kleine Änderung, um es und das funktioniert für mich

Dies ist TableRow in 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"> 

Dies ist selector.xml in res\drawable Ordner

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

konnte folgen, aber denken Sie daran, dass während der Erstellung eines Selektors unter einem drawbaren Ordner die Datei selector.xml als eine auszeichnungsfähige Ressource erstellt wird. –

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

es funktioniert. Tabellenlayout der Zeile onclick Listener und diesen Code einfügen. – bhruguni

+0

Vielen Dank, es hat mein Problem gelöst ..... du hast mich heute gerettet –

Verwandte Themen