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

All*_*ich 7 xml android

我正在尝试将选择器应用于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."
        />
Run Code Online (Sandbox Code Playgroud)

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>
Run Code Online (Sandbox Code Playgroud)

Cha*_*ley 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>
Run Code Online (Sandbox Code Playgroud)

然后在选择器中引用它:

<item android:state_focused="true"
      android:state_selected="true"
      android:state_pressed="false"
      android:drawable="@drawable/list_selector_focused" />
Run Code Online (Sandbox Code Playgroud)

  • 这是对问题的正确诊断,应该得到比现在更多的赞成.:) (4认同)