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

7
我正在尝试为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."
        />

在drawable文件夹中的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
只是为了帮助其他可能遇到这个问题的人:我通过将选择器直接应用于ListItem项的子元素,以android:background属性的形式进行修复,而且它起作用了! - Allen Gingrich
1
你应该接受下面的正确答案。 - Luke Sleeman
1个回答

40
你看到整个列表都被应用了焦点颜色是因为你直接引用了焦点和按下状态的颜色值。在 Android v2.3 及以下版本中已知存在一个 bug,即在这种情况下,颜色可绘制对象不遵守其界限。
要解决此问题,您可以创建一个使用所需颜色的形状可绘制对象并引用该对象。
例如,在 '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" />

4
这是一个正确的问题诊断,值得比它目前所获得的更多的赞。 :) - Reuben Scratton

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接