如何在单击时突出显示表格行?
Posted
技术标签:
【中文标题】如何在单击时突出显示表格行?【英文标题】:How can I highlight the table row on click ? 【发布时间】:2011-05-03 18:52:03 【问题描述】:作为我的项目要求,我必须在 onClick 上突出显示表格行。有什么办法可以做到这一点?或者请给我建议替代方案?
【问题讨论】:
有点晚了,但请查看此线程的答案:***.com/questions/6274343/… 你可以参考this link参考Josh Clemm给出的答案。 请在此处查看编辑后的答案:***.com/a/7022137/2469134 【参考方案1】:如果您想像使用通用 ListView 一样在点击突出显示时使用股票,您希望将每行的背景设置为 android:background="@android:drawable/list_selector_background"
这是一个例子:
<TableLayout
android:layout_
android:layout_
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 等)。
【讨论】:
你显然没有测试过这个。所有这一切都是设置表格行的背景颜色并为该行添加一个点击监听器,没有更多。 我已经对其进行了测试——并且它在生产中的使用相当成功。你是对的,它确实设置了背景。它的设置是关键 - 当您单击 ListView 中的条目时,@android:drawable/list_selector_background
是手机主题的标准突出显示。奇怪的是,在发表评论之前,您是否对其进行了测试?
我已经测试过了,它可以工作。这正是我想要的:TableRow 的按钮行为。
您可以选择或更改突出显示的默认颜色吗?
这与我的Nexus 5
上的 ListView 行为有些不同。我看到与我的 ListView 的浅蓝色相对应的橙色背景颜色。此外,ListView 似乎会将颜色变化渗透到嵌套元素。【参考方案2】:
即使我在 salil pandit 的帮助下也面临同样的问题,答案对其进行了一些更改,这对我有用
这是 xml 中的TableRow
:
<TableRow
android:id="@+id/tableRow1"
android:layout_
android:layout_
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>
【讨论】:
设法跟随,但请记住在drawable文件夹下创建选择器期间,将selector.xml创建为可绘制资源。【参考方案3】:在 onclicklistener 中添加:
tr1.setBackgroundResource(drawable.list_selector_background);
其中 tr1 是您的桌面。 (您需要将 tablerow 设置为 final 才能正常工作)。
【讨论】:
谢谢,但是当我按下该行时,它会突出显示,然后再次返回以取消突出显示!【参考方案4】: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));
//...
;
【讨论】:
它的工作。行 onclick 监听器的表格布局,并将此代码放入其中。【参考方案5】: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) + "";
);
【讨论】:
【参考方案6】:@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
);
【讨论】:
以上是关于如何在单击时突出显示表格行?的主要内容,如果未能解决你的问题,请参考以下文章