如何获取Android TableRow背景色?

问题描述 投票:0回答:4

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

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

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

谢谢

android colors background tablerow
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>

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
 }

 }

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
}

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
}

0
投票

如果查看setBackgroundColor()的源代码,就会看到它的工作原理:

TableRow tr = (TableRow)v;
Drawable bg = tr.getBackground();
int oldColor = ((ColorDrawable) bg.mutate()).getColor();
© www.soinside.com 2019 - 2024. All rights reserved.