2010-11-02 43 views
16

Como mi requisito del proyecto tengo que resaltar la fila de la tabla en onClick. Hay alguna forma de hacer esto? O por favor sugiérame la alternativa?¿Cómo puedo resaltar la fila de la tabla al hacer clic?

+1

Un poco tarde pero compruebe la respuesta de este hilo: http://stackoverflow.com/questions/6274343/how-to-change-the-background-color-of-a-tablerow-when-focused – Arnaud

+0

Puede consultar para [este enlace] (http://stackoverflow.com/questions/4410420/onclick-change-tablerow-background-color) consulte la respuesta dada por Josh Clemm. – prateek

+0

Consulte la respuesta editada aquí: http: //stackoverflow.com/a/7022137/2469134 –

Respuesta

24

Si desea utilizar la acción de clic destacado como el que se obtiene con un ListView genérico, que desea establecer el fondo de cada fila para ser android:background="@android:drawable/list_selector_background"

He aquí un ejemplo:

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

a continuación, en el código,

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

     } 
} 

Y usted debe conseguir una fila más destacado-poder al igual que en un ListView ...

EDITAR: Arriba le dará el selector de fondo de la lista del tema predeterminado. Si desea que el selector de más genérico (como el selector de diseño de material cuando el usuario toca una fila) utiliza este:

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

También esto se aplica a algo más que TableRows. Debería poder hacer esto en casi cualquier widget genérico con un onClickListener adjunto (TextViews, Buttons, etc.).

+0

Obviamente no ha probado esto. Todo lo que hace es establecer el color de fondo de la fila de la tabla y agrega un clic-oyente a la fila, ** nada ** más. –

+6

Lo he probado, y está siendo utilizado en la producción con bastante éxito. Tienes razón, establece el fondo. Lo que establece es la clave: el '@android: drawable/list_selector_background' es el resaltado estándar del tema del teléfono al hacer clic en una entrada en un ListView. Curiosamente, antes de dejar un comentario, ¿lo has probado? –

+0

Lo he probado y funciona. Es exactamente lo que estaba buscando: comportamiento del botón para un TableRow. – Lekensteyn

9

Dentro del complemento OnClickListener:

tr1.setBackgroundResource(drawable.list_selector_background); 

Dónde TR1 es su TableRow. (Necesitarás hacer la mesa final para que funcione).

+0

gracias, pero cuando presiono la fila, se resalta y luego vuelve a estar sin resaltar. –

11

Incluso yo estaba enfrentando el mismo problema con la ayuda de respuesta Salil Pandit hizo un pequeño cambio a la misma y que funciona para mí

Ésta es TableRow en 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"> 

Ésta es selector.xml en res\drawable carpeta

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

logró seguirlo, pero recuerde que durante la creación del selector en la carpeta dibujable, cree selector.xml como un recurso dibujable. –

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

funciona. table layout of row onclick listener y poner este código en él. – bhruguni

+0

Muchas gracias, resolvió mi problema ..... me salvaste hoy –

Cuestiones relacionadas