我已经在Android中创建了一个电子表格,以显示使用TableRow进行数据搜索的结果。 TableRows是动态创建的,因此一次最多可以显示30行。
我正在尝试在用户触摸该行时切换该行的背景色,并可以通过android:onClick事件轻松更改背景色。但是,一旦单击该行并且颜色发生更改,当另一个android:onClick事件启动时,我将无法切换回颜色。
因此,如何确定TableRow的颜色状态,以便构造适当的控制流并适当地切换颜色?有很多关于如何设置背景颜色的示例,但是对于获取背景颜色没有任何帮助。
谢谢
尝试一下:
// save old view style
Drawable defaultViewStyle = view.getBackground();
// set new style
view.setBackgroundResource(R.drawable.new_view_style);
// return default view style
view.setBackgroundDrawable(defaultViewStyle);
但是我认为这不是正确的方法。最好覆盖视图的所有可能条件:
// res drawable my_table_row_style:
<?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="@drawable/my_table_row_style_selected"/>
<item android:state_focused="false" android:state_pressed="true" android:drawable="@drawable/my_table_row_style_selected"/>
<item android:state_focused="true" android:state_pressed="false" android:drawable="@drawable/my_table_row_style_selected"/>
<item android:state_focused="false" android:state_pressed="false" android:drawable="@drawable/my_table_row_style_default"/>
</selector>
示例:
int MyPosition=100000;
...
...
onclick()
{
if(MyPosition==100000)
{
//first time selection
MyPosition=a//a=any int position
//change bg of selected row
}
else
{
//now u r selecting second or N th time
//so first set previous bg of MyPosition
//and clear MyPosition
//Now set bg of current bg nd set MyPosition
}
}
您可以保存由setTag()设置的颜色,并通过getTag()检索它。
void OnClick(View v)
{
Integer color = v.getTag();
if (null == color) // not clicked yet
{
color = COLOR_NOT_TOGLED;
}
if (COLOR_NOT_TOGLED == color)
{
color = COLOR_TOGLED;
}
else
{
color = COLOR_NOT_TOGLED;
}
v.setBackGround(color);
v.setTag(color); // save
}
UPDATE好的,让我们修复它))
void OnClick(View v)
{
Object o = v.getTag();
Integer color = (null == o) ? COLOR_NOT_TOGLED : (Integer) o;
if (COLOR_NOT_TOGLED == color) {
color = COLOR_TOGLED;
} else {
color = COLOR_NOT_TOGLED;
}
v.setBackgroundColor(color);
v.setTag(color); // save
}
如果查看setBackgroundColor()
的源代码,就会看到它的工作原理:
TableRow tr = (TableRow)v;
Drawable bg = tr.getBackground();
int oldColor = ((ColorDrawable) bg.mutate()).getColor();