2013年6月25日火曜日

[Android]ListViewの選択されたアイテムの背景色を変更

ListViewの行をタップして選択した後も選択された行の背景色を変えたままにする方法を紹介します。

res/drawable/list_item_selector.xml

タッチした時とタッチ後の色を変えるためのselectorを定義します。

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
  <item android:state_selected="true"
        android:drawable="@color/selected_list_item_color"/>
  <item android:state_pressed="true"
    android:drawable="@color/selected_list_item_color"/>
  <item android:drawable="@color/default_color"/>
</selector>

res/values/colors.xml

list_item_selector.xmlで参照する色を定義します。

<?xml version="1.0" encoding="utf-8"?>
<resources>
  <color name="selected_list_item_color">#ffd33f</color>
  <color name="default_color">#000000</color>
</resources>

res/layout/list_row.xml

ListViewの行を定義するレイアウトのbackgroundに上記のlist_item_selectorを設定します。

<?xml version="1.0" encoding="utf-8"?>    
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
              android:orientation="horizontal"
              android:layout_width="match_parent"
              android:layout_height="wrap_content"
              android:background="@drawable/list_item_selector"
    >
  <TextView
      android:id="@+id/symbol_text"
      android:layout_width="wrap_content"
      android:layout_height="wrap_content"
      android:text="symbol"
      />
</RelativeLayout>

scala/MainActivity.scala

ListViewのItemClickListenerでクリックされたアイテムに対してsetSelected(true)を呼び出します。
こうすることでlist_item_selectorで設定したstate_selected=”true”の条件にマッチするようになります。

val unitList = findView(TR.unit_list)
unitList.setOnItemClickListener(new OnItemClickListener {
  def onItemClick(parent: AdapterView[_], view: View, pos: Int, arg3: Long) {
    view.setSelected(true)
  }
})

0 件のコメント:

コメントを投稿