- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
我有一个包含多个数据的表行。单击一行时,该特定行会以深灰色突出显示。但是当我单击下一行时,单击的行会突出显示,但上一行仍会突出显示。如何禁用上一行的突出显示。我尝试了很多技巧,但没有用。
这是我的示例代码。
tableRow.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
v.setBackgroundColor(Color.DKGRAY);
}
我已经以编程方式创建了布局。我没有使用 XML。
提前致谢。
最佳答案
如果您想像使用通用 ListView 一样在点击高亮时使用股票,您需要将每一行的背景设置为
android:background="@drawable/selector"
这是一个例子:
<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">
这是 res\drawable
文件夹中的 selector.xml
<?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="@color/blue></item>
<item android:state_focused="true"
android:state_pressed="false"
android:drawable="@color/custom"></item>
<item
android:state_focused="false"
android:state_pressed="true"
android:drawable="@color/gray" />
<item android:drawable="@color/white"></item>
</selector>
更新:像下面一样以编程方式创建StateListDrawable
,并将Background
设置为您的TableRow
:
Drawable d1=activity.getResources().getDrawable(R.drawable.gradient_bg_hover);
GradientDrawable g = new GradientDrawable(Orientation.TOP_BOTTOM,
new int[] { Color.DKGRAY});
g.setGradientType(GradientDrawable.LINEAR_GRADIENT);
StateListDrawable states = new StateListDrawable();
states.addState(new int[] {android.R.attr.state_pressed,-android.R.attr.state_selected},d1);
states.addState(new int[] {-android.R.attr.state_focused},g);
table_row.setBackgroundDrawable(states);
这是 res\drawable
文件夹中的 gradient_bg_hover.xml
。
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="rectangle">
<!-- Gradient BgColor for listrow Selected -->
<gradient
android:startColor="#18d7e5"
android:centerColor="#16cedb"
android:endColor="#09adb9"
android:angle="270" />
</shape>
更新2:您可以根据需要向StateListDrawable
添加更多State
。
android:state_activated:
设置 View 或其父 View 何时被“激活”,这意味着用户当前已将其标记为感兴趣。
android:state_active:
StateListDrawable
的状态值。
android:state_enabled:
在启用 View 时设置。
android:state_focused:
StateListDrawable
的状态值,当 View 具有输入焦点时设置。
android:state_pressed:
当用户在 View 中按下时设置。
android:state_selected:
当前选择 View (或其父 View 之一)时设置。
关于 StateListDrawable 的更多信息
关于android - 单击表行时突出显示并在单击下一行时禁用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21573507/
我是一名优秀的程序员,十分优秀!