Android: Entire ListView changes color on focus, not just ListView child item
Asked Answered
S

1

7

I am trying to apply a selector to a ListView to make it easy for those without touch screens to navigate my app. The thing is, by applying the selector to the ListView, it only seems to apply the background colors to the entire list, not the items inside of it.

Any ideas? Here's some code:

    <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 in drawable folder:

    <?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>
Sferics answered 24/8, 2010 at 16:57 Comment(2)
Just to help anyone else out who may have this problem: I fixed it by applying the selector right to the ListItem item child in the form of the android:background attribute, and it worked!Sferics
You should accept the correct answer belowCarolacarolan
T
40

The reason you're seeing the focused colour being applied to the whole list is because you have directly referenced a colour value for the focused and pressed states. There is a known bug in Android v2.3 and below where the colour drawable doesn't honour its bounds in these circumstances.

To fix this issue you can create a shape drawable using the desired colours and reference that instead.

e.g define the shape in 'drawables/list_selector_focused.xml' as:

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

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

</shape>

And then reference that in the selector:

<item android:state_focused="true"
      android:state_selected="true"
      android:state_pressed="false"
      android:drawable="@drawable/list_selector_focused" />
Toni answered 7/5, 2012 at 23:19 Comment(1)
This is a correct diagnosis of the problem and deserves rather more upvotes than it's currently getting. :)Pedestrianize

© 2022 - 2024 — McMap. All rights reserved.