Android:整个ListView更改焦点上的颜色,而不仅仅是ListView子项

时间:2010-08-24 16:57:46

标签: android xml

我正在尝试将选择器应用于ListView,以便让没有触摸屏的人轻松浏览我的应用。问题是,通过将选择器应用于ListView,它似乎只将背景颜色应用于整个列表,而不是其中的项目。

有什么想法吗?这是一些代码:

    <ListView
   android:id="@android:id/list"
   android:layout_width="fill_parent"
   android:layout_height="fill_parent"
   android:listSelector="@drawable/listselector"
   />

   <TextView android:id="@android:id/empty"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="There are no Clients yet."
        />
可绘制文件夹中的

listselector.xml:

    <?xml version="1.0" encoding="utf-8"?>
<selector
    android:id="@+id/myselector"
    xmlns:android="http://schemas.android.com/apk/res/android">
    <!-- Non focused states -->
    <item
        android:state_focused="false"
        android:state_selected="false"
        android:state_pressed="false"
        android:drawable="@color/darkblue" />
    <item
        android:state_focused="false"
        android:state_selected="true"
        android:state_pressed="false"
        android:drawable="@color/green" />

    <!-- Focused states -->
    <item
        android:state_focused="true"
        android:state_selected="false"
        android:state_pressed="false"
        android:drawable="@color/green" />
    <item
        android:state_focused="true"
        android:state_selected="true"
        android:state_pressed="false"
        android:drawable="@color/green" />

    <!-- Pressed -->
    <item
        android:state_pressed="true"
        android:drawable="@color/green" />
</selector>

1 个答案:

答案 0 :(得分:40)

您看到聚焦颜色应用于整个列表的原因是您直接引用了聚焦和按下状态的颜色值。 Android v2.3及更低版本中存在一个已知错误,其中颜色可绘制在这些情况下不符合其范围。

要解决此问题,您可以使用所需的颜色创建可绘制的形状,然后引用它。

例如将'drawables / list_selector_focused.xml'中的形状定义为:

<shape xmlns:android="http://schemas.android.com/apk/res/android"
       android:shape="rectangle">

    <solid android:color="@color/green" />

</shape>

然后在选择器中引用它:

<item android:state_focused="true"
      android:state_selected="true"
      android:state_pressed="false"
      android:drawable="@drawable/list_selector_focused" />