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