0

我已经成功地将选定的自定义列表项的颜色(其根未实现)从橙色更改为 system_blue,方法是为其 attr 背景分配: ViewGroupCheckableselector.xml

<selector>  
    <item android:state_pressed="true" 
        android:drawable="@color/system_blue"/>
    <item android:state_checked="true"
        android:drawable="@color/system_blue"/>
    <item android:drawable="@android:color/transparent"/> 
</selector>  

即使state_checked定义了大小写,但手指离开所选项目后,所选列表项的状态将不会保持。

现在自定义列表项的 root ViewGroup implements Checkable,因为我需要维护所选列表项的状态。InterfaceCheckable的成员函数setChecked()实现如下:

public void setChecked(boolean checked) {
    mChecked = checked;
    setBackgroundDrawable(checked ? new ColorDrawable(
    getResources().getColor(R.color.system_blue)) : null);
}

现在,在手指离开选择项后,选择项的颜色可以保持为 system_blue。然而,当按下该项目时,颜色首先更改为默认橙色而不是 system_blue。我的 android 设备具有默认的橙色。任何想法将不胜感激。

4

3 回答 3

1

尝试自己处理检查,将 listView 的选择模式设置为CHOICE_MODE_NONE

并处理listView的onItemClickListener中item的checked状态。所以你可以完全控制背景和状态。

于 2012-07-25T20:43:58.287 回答
0

如果在 HoneyComb 及更高版本上工作,只需添加

?android:attr/activatedBackgroundIndicator

作为父视图的背景。这是一个简单的修复:)

于 2012-12-05T07:15:59.167 回答
0

检查我今天做的这个例子就是这样做的:

Github 上的代码

编辑

要在按下时更改项目颜色,需要为按下状态添加一个新项目,如下所示:

<item android:drawable="@drawable/gradient_bg_hover" 
    android:state_pressed="true"/>
于 2012-07-25T20:57:52.080 回答