2010-06-04 141 views
7

我已经搜索了interwebs,并发现了许多关于如何使用列表选择器更改列表视图颜色的文章。但它似乎并不适合我。所以我的问题是我做错了什么?自定义Android ListView颜色?

当我使用下面的文件时,我得到一个列表,其中所有项目背景最初都是蓝色的。 (我期望白色)

当我上下移动焦点时,文本变成深灰色,并且项目背景仍然是蓝色。 (这是当我期望一行是蓝色的,其余的是白色的)

当我点击一行时,单击的行的背景变成黑色,其他所有行变成绿色。 (我希望有我点击变绿行,其余是白色)

这是我的主要布局文件:

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:orientation="vertical" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" 
    > 
<ListView 
    android:id="@android:id/list" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:listSelector="@drawable/item_selector" 
    /> 
<TextView 
    android:id="@android:id/empty" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:text="@string/empty" 
    /> 
</LinearLayout> 

这里是我的列表项文件:

<?xml version="1.0" encoding="utf-8"?> 
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" 
    android:orientation="horizontal" 
    android:padding="10sp"> 
    <CheckBox 
     android:id="@+id/checkbox" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:focusable="false" 
     /> 
    <TextView 
     android:id="@+id/title" 
     android:layout_width="fill_parent" 
     android:layout_height="wrap_content" 
     android:ellipsize="end" 
     android:singleLine="true" 
     android:textStyle="bold" 
     android:padding="7dip" 
     android:textSize="18sp" 
     android:layout_toRightOf="@id/checkbox" 
     /> 
</RelativeLayout> 

这里我的色彩文件:

<?xml version="1.0" encoding="utf-8"?> 
<resources> 
    <color name="red">#ff00</color> 
    <color name="green">#f0f0</color> 
    <color name="blue">#f00f</color> 
    <color name="white">#ffff</color> 
</resources> 

这是我选择的文件:

<?xml version="1.0" encoding="utf-8"?> 
<selector xmlns:android="http://schemas.android.com/apk/res/android"> 
    <item 
     android:state_pressed="true" 
     android:drawable="@color/green" /> 
    <item 
     android:state_focused="true" 
     android:drawable="@color/blue" /> 
    <item 
     android:drawable="@color/white" /> 
</selector> 

希望这是愚蠢和简单的,我做错了。

在此先感谢。

+0

它听起来像整个listView本身正在集中,而不是单个列表项。 – YGL 2010-06-04 13:50:46

回答

7

我认为android:listSelector =“@ drawable/item_selector”仅适用于视图的根目录,而不是他的子目录。

尝试添加@绘制/ item_selector为您的RelativeLayout与android:background="@drawable/item_selector"一个背景与放一个透明的布局到listSelector:

android:listSelector="@android:color/transparent" 
+0

这是胜利的组合。谢谢!现在已经挣扎了好几天了。 – 2010-06-04 16:48:19

+0

很好,谢谢:) – ademar111190 2012-08-08 15:05:22

1

其实,如果你想以编程方式做到这一点,而无需使用资源,你可以设置你的元素的颜色。例如,设置文本颜色#F123456在TextView

objTextView.setTextColor(color.parseColor("#F12345")); 

这是方便,如果你想动态设置列表视图的颜色是用户可选择的,也许是存储在数据库中,你根本不能使用颜色列表的静态资源文件。