読者です 読者をやめる 読者になる 読者になる

うさがにっき

読書感想文とプログラムのこと書いてきます

ListViewのlistSelectorが効かないときの対処方法

Android

概要

listviewのカラムを選択時に色を変更したいときに使う、listSelectorが効かないときがたまにある
その原因と対処法

問題

下記のようなlistViewを定義して、

<ListView
    android:id="@+id/category_list_view"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:listSelector="@drawable/list_selector"
    android:headerDividersEnabled="false"
    android:dividerHeight="1dp"
    android:divider="@drawable/category_list_divider"
    android:fadeScrollbars="false"
    />

list_selector

<?xml version="1.0" encoding="UTF-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
  <item android:state_window_focused="false" 
      android:state_selected="false" 
      android:drawable="@android:color/transparent" /> 
  <item android:state_pressed="true" 
      android:state_selected="false" 
      android:drawable="@color/list_selector" /> 
</selector>

下記のようなレイアウトを設定したadapterを設定するとする

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:background="#ffffff"
    android:gravity="center_vertical"
    android:padding="10dp" >

    <TextView
        android:id="@+id/category_title"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentLeft="true"
        android:text="categoryTitle"
        android:textColor="@color/text_color_01"
        android:textSize="15dp" />
</RelativeLayout>

するとlistSelector設定したはずのlistSelectorが正常に動かず、常に背景が白のままになる

解決方法

adapterにセットしたレイアウトの背景が白なのが問題
背景を透過にすればOK

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:background="#00000000"
    android:gravity="center_vertical"
    android:padding="10dp" >

    <TextView
        android:id="@+id/category_title"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentLeft="true"
        android:text="categoryTitle"
        android:textColor="@color/text_color_01"
        android:textSize="15dp" />
</RelativeLayout>