0

我在 Android 中创建了一个电子表格,以使用 TableRow 显示数据搜索的结果。TableRows 是动态创建的,因此一次最多可以显示 30 行。

我试图在用户触摸行时切换行的背景颜色,并且可以使用 android:onClick 事件轻松更改背景颜色。但是,一旦单击该行并且颜色发生变化,当另一个 android:onClick 事件启动时,我无法将颜色切换回来。

那么如何确定 TableRow 的颜色状态,以便构建正确的控制流并适当地切换颜色呢?有很多关于如何设置背景颜色的示例,但对于获取背景颜色没有任何帮助。

谢谢

4

4 回答 4

0

尝试这个:

// 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>
于 2013-06-25T12:43:06.113 回答
0

例子:

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
 }

 }
于 2013-06-25T13:00:19.260 回答
0

您可以保存您通过 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
}

更新 好的,让我们修复它))

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
}
于 2013-06-25T13:39:35.020 回答
0

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

TableRow tr = (TableRow)v;
Drawable bg = tr.getBackground();
int oldColor = ((ColorDrawable) bg.mutate()).getColor();
于 2020-02-04T17:54:49.813 回答