android highlight android-tablelayout

android - ¿Cómo puedo resaltar la fila de la tabla al hacer clic?



highlight android-tablelayout (5)

Como requisito de mi proyecto, tengo que resaltar la fila de la tabla en onClick. ¿Hay alguna manera de hacer esto? ¿O por favor sugiéreme la alternativa?


Dentro de la onclicklistener agregar:

tr1.setBackgroundResource(drawable.list_selector_background);

Donde tr1 es tu restaura. (Necesitarás hacer el final de la tabla para que funcione).


Incluso me enfrenté al mismo problema con la ayuda de Salil Pandit. La respuesta hizo un pequeño cambio y eso me funciona.

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

Esto es selector.xml en la carpeta res/drawable

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


Si desea utilizar el stock al hacer clic en el resaltado como se obtiene con un ListView genérico, desea establecer que el fondo de cada fila sea android:background="@android:drawable/list_selector_background"

Aquí hay 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>

Luego 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 debería obtener una fila que se pueda resaltar como en un ListView ...

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

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

También esto se aplica a más que solo TableRows. Debería poder hacer esto en casi cualquier widget genérico con un onClickListener adjunto (vistas de texto, botones, etc.).


private OnClickListener tablerowOnClickListener = new OnClickListener() { public void onClick(View v) { //Highlight selected row //Highlight selected row //Start from 0 to make sure that the first item will also be looped //through for (int i = 0; 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)); } } //... } };


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) + ""; } } });