点击时更改表格行背景颜色

3

所以我正在尝试找到一种简单的方法,在单击表行时更改其背景颜色。我一直在试图找到一种调用背景颜色并检查它的方法,但我还没有找到调用颜色的方法。这是我现在拥有的。

    RowName = (TableRow) findViewById(R.id.RowName); 
    RowName.setBackgroundColor(Color.TRANSPARENT);

    RowName.setOnClickListener(new View.OnClickListener() {

        public void onClick(View v) {

            if (RowName.equals(Color.TRANSPARENT))
            RowName.setBackgroundColor(Color.YELLOW);

            else if (RowName.equals(Color.YELLOW))
            RowName.setBackgroundColor(Color.TRANSPARENT);
        }
    });

我知道这是错误的。希望你能看出我想要实现什么。如果不行,我想做的是让表格行透明起始。当有人点击表格行时,我希望它变成黄色。然后,如果他们再次点击它,我希望它变回透明。谢谢。


如果有人正在寻找类似于单击按钮时的背景颜色行为,请参见https://dev59.com/G2855IYBdhLWcg3w6Y9q。 - Lekensteyn
2个回答

8
你需要将行的背景颜色设置为状态列表可绘制对象(可以处理选中、按下、活动和非活动状态)。 http://developer.android.com/guide/topics/resources/drawable-resource.html#StateList XML 应该类似于这样:
<?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>

好的。很棒。所以我已经让它大部分工作了。但是有没有办法让它保持黄色,直到再次按下它呢? - Joshua Sutherland
好的,我现在明白你在做什么了。那么状态列表可能不是你想要的,而应该是与你最初拥有的类似的东西。你有多少行?因为如果你没有那么多,你可以保留一个变量来保存行的状态(而不是查看当前背景)。 - Josh Clemm
我有20到25行。 - Joshua Sutherland

2

以下是最终可行的解决方案。请确保您的TableRows已命名。在我的onCreate之前,我有:

private TableRow RowName;

还有:

int state = 0;

然后添加以下代码:

public void RowName(View view) {
  switch (state) {
  case 0:
      RowName.setBackgroundColor(Color.YELLOW);
      state = 1;
      break;
  case 1:
      RowName.setBackgroundColor(Color.TRANSPARENT);
      state = 0;
      break;
  }
}

要让它起作用,请进入您的XML文件,在OnClick属性中添加RowName或您正在使用的public void的名称。享受吧。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接