前人未踏の領域へ アプリ開発編

Android, iOSアプリ開発に関する調査メモ置き場。ほとんどAndroid。はてなダイアリーから移行したため古い記事にはアプリ以外も含まれます。

プログラム上からSelectorを設定する

課題

同じレイアウトファイルを使うが色が異なる2つのパーツがあり、
プログラム上からselectorを設定し、isSelectedを使ったがsetTextColorとsetBackgroundColorが機能しない。どうすればいいか。

対応

TextColorの場合

プログラム上からsetTextColorでSelectorを使うには引数にcolorStateListを渡す必要がある。ContextCompat.getColor()では駄目で、
ContextCompat.getColorStateListを使う

viewHolder.label?.setTextColor(ContextCompat.getColorStateList(context, R.color.selector_text))
背景色の場合

setBackgroundColorではなくsetBackgroundResourceを使う

selector_bg.xml
<?xml version="1.0" encoding="utf-8" ?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:drawable="@color/dark" android:state_selected="true"/>
    <item android:drawable="@color/white" android:state_selected="false" />
</selector>  
viewHolder.itemView.setBackgroundResource(R.drawable.selector_bg)