Android 如何在单击时高亮显示表格行?
作为我的项目要求,我必须突出显示onClick上的表行。有没有办法做到这一点?或者请你给我推荐一个替代方案 如果您想像使用一般ListView一样使用点击突出显示的股票,您需要将每行的背景设置为Android 如何在单击时高亮显示表格行?,android,highlight,android-tablelayout,Android,Highlight,Android Tablelayout,作为我的项目要求,我必须突出显示onClick上的表行。有没有办法做到这一点?或者请你给我推荐一个替代方案 如果您想像使用一般ListView一样使用点击突出显示的股票,您需要将每行的背景设置为android:background=“@android:drawable/list\u selector\u background” 以下是一个例子: <TableLayout android:layout_width="fill_parent" android:layout_height
android:background=“@android:drawable/list\u selector\u 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>
您应该得到一个可高亮显示的行,就像在ListView中一样
编辑:
上面将为您提供默认主题的列表背景选择器。如果需要更通用的选择器(如用户触摸行时的材质设计选择器),请使用以下选项:
android:background="?android:attr/selectableItemBackground"
这也不仅仅适用于表行。您应该能够在几乎任何附加了onClickListener(文本视图、按钮等)的通用小部件上执行此操作。在onClickListener中添加:
tr1.setBackgroundResource(drawable.list_selector_background);
其中tr1是您的tablerow。(您需要将tablerow设置为最终版本,它才能正常工作)。即使是在salil pandit的帮助下,我也面临着同样的问题。answer对它做了一点修改,这对我来说很有效 这是xml中的
TableRow
:
<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">
private OnClickListener表rownclicklistener=new OnClickListener()
{
公共void onClick(视图v)
{
//突出显示选定行
//突出显示选定行
//从0开始,确保第一个项目也将循环
//通过
对于(int i=0;i
@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
}
});
对于通用选择器(材料设计):
有点晚了,但请检查此线程的答案:您可以参考Josh Clemm给出的答案。请查看此处编辑的答案:您显然没有测试过此问题。所有这些都是设置表行的背景色,并向行中添加一个单击侦听器,仅此而已。我已经对其进行了测试,并在生产中成功地使用了它。你说得对,它确实设置了背景。它设置的是按键-
@android:drawable/list\u selector\u background
是当你点击列表视图中的一个条目时手机主题的标准突出显示。奇怪的是,在发表评论之前,你测试过它吗?我已经测试过了,它可以工作了。这正是我想要的:TableRow的按钮行为。您可以选择或更改突出显示的默认颜色吗?这与我的Nexus 5
上的ListView行为有些不同。我看到一个橙色的背景色,与我的ListView的浅蓝色相对应。此外,ListView似乎会将颜色更改向下延伸到嵌套元素。我们会设法跟随,但请记住,在drawable文件夹下创建选择器时,请将selector.xml创建为可绘制资源。谢谢,但当我按该行时,它会高亮显示,然后再次返回以取消高亮显示!它起作用了。行onclick listener的表布局,并将此代码放入其中。
<?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>
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) + "";
}
}
});
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));
}
}
//...
}
};
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
}
});