在我的XML中,我有一个只有1个TableRow的TableLayout,即标题。我添加的其他所有行动态设置TableRow&的BackgroundColor(LTGray)。 TextView中的TextColor。我还处理每一行的点击事件。
private void createView(TableRow tr, TextView tv, String data, int rowId) {
tv.setText(data);
//tv.setLayoutParams(new LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT));
tv.setTextColor(Color.BLACK);
tv.setPadding(20, 0, 0, 0);
tr.setPadding(0, 1, 0, 1);
tr.setBackgroundColor(Color.LTGRAY);
tr.setId(rowId);
tr.setClickable(true);
tr.setOnClickListener(this);
tr.addView(tv);
}
注册选择: 我想改变TableRow的BackgroundColor让我们说黄色。因此,如果选择第1行,则bgColor应为黄色。然后,如果选择第3行,则第1行的颜色应变为LTGray。
如果单击Rows中的任何位置,则也应取消选择所选行(如果有的话)。为此,我必须添加主要布局clickListener或再次选择行并取消选择?
选择器(状态列表drawable)可以用于这两种方式,或者我以编程方式处理它。我应该在我的Java代码中使用什么类型的Drawable来设置setBackgroundDrawable以获得statelist drawable?
我相信像TableRow的其他组件也onClick也会照顾onTouch。如果我错了,请纠正我。想要通过触摸行来处理相同的功能。
实现目标的最佳方法是什么?任何帮助都非常感谢。
答案 0 :(得分:0)
不要在代码中更改它!请改用选择器。
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<!-- Active state -->
<item android:state_selected="true" android:state_focused="false" android:state_pressed="false" android:drawable="@android:color/transparent" />
<!-- Inactive state-->
<item android:state_selected="false" android:state_focused="false" android:state_pressed="false" android:drawable="@android:color/transparent" />
<!-- Pressed state-->
<item android:state_pressed="true" android:drawable="@android:color/yellow" />
<!-- Selected state (using d-pad) -->
<item android:state_focused="true" android:state_selected="true" android:state_pressed="false" android:drawable="@android:color/yellow" />
</selector>
不是那么彻底,但更有用的答案是here
动态更改选择器here
答案 1 :(得分:0)
答案 2 :(得分:0)
谢谢朋友们,
我在代码本身管理它。为添加的每一行添加了单击侦听器,并相应地处理所选行和未选行的颜色。