0

在我的 android 应用程序中有一个在运行时加载的表格布局。我已经实现了一个代码来在单击该行时更改该表的背景颜色。

private OnClickListener trOnClickListener = new OnClickListener() {
    public void onClick(View v) {
        TableRow tablerow = (TableRow)v;

        tablerow.setBackgroundDrawable(getResources().getDrawable(
                R.drawable.table_row_selector));


    }
};

现在我想在用户单击表格的另一行并且新单击的行应该更改它的颜色时删除此颜色。

这是我的可绘制对象。

<?xml version="1.0" encoding="utf-8"?>

<item android:drawable="@drawable/ab_stacked_solid_whiteaction" android:state_pressed="true"/>
<item android:drawable="@drawable/table_shape" android:state_enabled="true"/>

任何建议都受到高度赞赏。

提前感谢

4

3 回答 3

1

改变你的drawable看起来像这样

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:drawable="@drawable/background_selected" android:state_enabled="true"
          android:state_pressed="true"/>
    <item android:drawable="@drawable/background_selected" android:state_enabled="true"
          android:state_focused="true"/>
    <item android:drawable="@drawable/background_selected" android:state_enabled="true"
          android:state_selected="true"/>
    <item android:drawable="@drawable/background_selected" android:state_active="true"
          android:state_enabled="true"/>

    <item android:drawable="@drawable/background_selectable" android:state_pressed="false"/>
    <item android:drawable="@drawable/background_selectable" android:state_focused="false"/>
    <item android:drawable="@drawable/background_selectable" android:state_selected="false"/>
    <item android:drawable="@drawable/background_selectable" android:state_active="false"/>
</selector>

然后你将你的行设置为tablerow.setSelected(true). 当另一行被选中时,将上一个选中的行设置为tablerow.setSelected(false),将新选中的行设置为true

我在我的一个中使用ListViews它并且它有效。

希望这可以帮助

于 2013-11-15T10:50:00.407 回答
0

如果您是从 xml 使用选择器,并应用为背景或源..

于 2013-11-15T10:11:06.023 回答
0

创建字段:查看restoredView

row.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View view) {
        if (restoredView != null) {
            restoredView.setBackgroundColor(Color.parseColor("#EEEEEE"));
        }
        view.setBackgroundColor(Color.parseColor("#DDDDDD"));
        restoredView = view;
    }
});
于 2017-02-16T11:29:54.250 回答