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

我正在尝试将一个select器应用于ListView,以使那些没有触摸屏的人可以轻松地导航我的应用程序。 问题是,通过将select器应用于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> 

Solutions Collecting From Web of "Android:整个ListView在焦点上改变颜色,而不仅仅是ListView的子项"

你看到的焦点颜色被应用到整个列表的原因是因为你已经直接引用了焦点和按下状态的颜色值。 在Android v2.3及以下版本中存在一个已知的错误,在这种情况下颜色可绘制不符合其边界。

要解决这个问题,你可以使用所需的颜色和引用来创build一个可绘制的形状。

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

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

然后在select器中引用:

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