作为我的项目要求,我必须突出显示 onClick 上的表格行。有什么办法可以做到这一点?或者请给我建议替代方案?
问问题
26162 次
6 回答
27
如果您想像使用通用 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 的通用小部件上执行此操作(TextViews、Buttons 等)。
于 2011-11-20T21:14:09.250 回答
11
即使我在salil pandit的帮助下也面临同样的问题,答案也做了一些改变,这对我有用
这是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>
于 2012-12-19T10:50:17.280 回答
9
在 onclicklistener 中添加:
tr1.setBackgroundResource(drawable.list_selector_background);
其中 tr1 是您的桌面。(您需要将 tablerow 设为 final 才能正常工作)。
于 2012-04-18T17:28:59.790 回答
2
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));
}
}
//...
}
};
于 2017-06-02T09:17:45.180 回答
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) + "";
}
}
});
于 2016-12-28T11:07:55.610 回答
0
@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
}
});
于 2020-06-09T18:22:21.803 回答