如何获得Android TableRow背景色?

如何获得Android TableRow背景色?,android,colors,background,tablerow,Android,Colors,Background,Tablerow,我在Android中创建了一个电子表格,用TableRow显示数据搜索的结果。TableRows是动态创建的,因此一次最多可以显示30行 我试图在用户触摸某行时切换该行的背景色,并且可以通过android:onClick事件轻松更改背景色。但是,一旦单击行并更改颜色,我就无法在启动另一个android:onClick事件时切换回颜色 那么,如何确定TableRow的颜色状态,以便构建适当的控制流并适当地切换颜色呢?有很多关于如何设置背景色的示例,但对获取背景色没有任何帮助 谢谢试试这个: //

我在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>
//res可绘制我的表格行样式:
示例:

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()检索它

更新 好的,让我们来解决它


如果您查看
setBackgroundColor()
的源代码,就会看到它是如何工作的:

TableRow tr = (TableRow)v;
Drawable bg = tr.getBackground();
int oldColor = ((ColorDrawable) bg.mutate()).getColor();

我建议您将默认颜色设置为所有表格行,以便在用户单击其他表格行时可以重置为该默认颜色。用户必须能够选择多行,因此我必须首先确定所单击行的颜色状态。指定了默认颜色,但我不知道如何切换回该颜色。getBackground()返回可绘制的颜色。你用它做什么?试试这样的东西:
Drawable-Drawable=getBackground();如果(drawable instanceof ColorDrawable){ColorDrawable ColorDrawable=(ColorDrawable)drawable;int color=ColorDrawable.getColor();}
可能需要在创建表时设置标记,然后跟踪所有标记。我只想识别颜色,检查颜色是否改变。@user1168400。如果您看到我的伪代码,您会发现如果标记还没有设置(如果标记为null),我将继续处理这个案例。所以您不需要在创建表时“初始化”每一行的标记。若单击行的标记为空,我假设此行处于“未切换”状态,我们需要将backgrownd color设置为color\u togled。不管怎样,我的答案只是解决你问题的诀窍。如果我在做这个功能,我会创建一个类似列表或sparsearray的东西来保存每一行的状态;不兼容,因为v.getTag()是对象,而不是整数。
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
}
TableRow tr = (TableRow)v;
Drawable bg = tr.getBackground();
int oldColor = ((ColorDrawable) bg.mutate()).getColor();