当应用ListView的自定义列表项与实现Checkable的根ViewGroup时,是否不能更改所选项的颜色?

时间:2012-07-25 11:29:16

标签: android android-layout

我已成功更改所选自定义列表项颜色,其根ViewGroup未实现Checkable,从橙色到system_blue通过为其attr背景分配selector.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案例已定义,但在手指离开所选项目后,也不会保留所选列表项目的状态。

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

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

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

3 个答案:

答案 0 :(得分:1)

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

并处理listView的onItemClickListener中项目的已检查状态。所以你可以完全控制背景和状态。

答案 1 :(得分:0)

查看我今天做的这个例子,确切地说:

Code on Github

修改

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

<item android:drawable="@drawable/gradient_bg_hover" 
    android:state_pressed="true"/>

答案 2 :(得分:0)

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

即可
?android:attr/activatedBackgroundIndicator

作为父视图的背景。它很容易解决:)