В качестве требования моего проекта я должен выделить строку таблицы на onClick. Есть ли способ сделать это? Или, пожалуйста, предложите мне альтернативу?
Как я могу выделить строку таблицы при нажатии?
Ответы (5)
Если вы хотите использовать подсветку акций при нажатии, как в общем ListView, вы хотите установить фон каждой строки как android:background="@android:drawable/list_selector_background"
Вот пример:
<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>
Затем в коде
TableRow firstRow = (TableRow) findViewById(R.id.first_row);
firstRow.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
// TODO: do your logic here
}
}
И вы должны получить строку с возможностью выделения, как в ListView...
РЕДАКТИРОВАТЬ: Выше приведен селектор фона списка тем по умолчанию. Если вам нужен более общий селектор (например, селектор дизайна материала, когда пользователь касается строки), используйте это:
android:background="?android:attr/selectableItemBackground"
Также это относится не только к TableRows. Вы должны иметь возможность сделать это практически для любого универсального виджета с прикрепленным onClickListener (текстовые представления, кнопки и т. д.).
@android:drawable/list_selector_background
является стандартным выделением темы телефона, когда вы нажимаете на запись в ListView. Любопытно, прежде чем оставить комментарий, ВЫ его проверяли?
- person Salil Pandit; 10.02.2012
Nexus 5
. Я вижу оранжевый цвет фона, а не голубой цвет моего ListView. Кроме того, ListView, похоже, передает изменение цвета вложенным элементам.
- person theblang; 13.06.2014
Даже я столкнулся с той же проблемой с помощью ответа Салила Пандита, внесшего в нее небольшое изменение, и это работает для меня.
Это TableRow
в 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">
Это selector.xml
в папке 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>
В onclicklistener добавьте:
tr1.setBackgroundResource(drawable.list_selector_background);
Где tr1 - ваша таблица. (вам нужно будет сделать tablerow окончательным, чтобы он работал).
Программная версия @SalilPandit с селектором строк:
final TableRow row = new TableRow(this);
row.setBackgroundResource(android.R.drawable.list_selector_background);
row.setOnClickListener(new View.OnClickListener(){
@Override
public void onClick(View view){
row.setFocusable(true);
// TODO
}
});
Для универсального селектора (материальный дизайн):
TypedValue typeValue = new TypedValue();
this.getTheme().resolveAttribute(android.R.attr.selectableItemBackground,
typeValue, true);
final TableRow row = new TableRow(this);
row.setBackgroundResource(typeValue.resourceId);
row.setOnClickListener(new View.OnClickListener(){
@Override
public void onClick(View view){
row.setFocusable(true);
// TODO
}
});