タイトル通り。
APIから取得してきた画像やら色コードやらを使ってSelectorを作らなきゃいけなくなったので調べて作った。
Bitmap
プログラムで書く
// Bitmapのセレクター作成
private fun createSelectorBitmapDrawable(
enableBitmap: Bitmap,
disableBitmap: Bitmap
): StateListDrawable {
val enable = BitmapDrawable(context.resources, enableBitmap)
val disable = BitmapDrawable(context.resources, disableBitmap)
val states = StateListDrawable()
states.addState(intArrayOf(-android.R.attr.state_enabled), enable)
states.addState(intArrayOf(android.R.attr.state_enabled), disable)
return states
}
xmlだと、、、
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:drawable="@drawable/enable" android:state_enabled="true" />
<item android:drawable="@drawable/desable" android:state_enabled="false" />
</selector>
使い方
imageView.setImageDrawable(selector)
createSelectorBitmapDrawableで作ったSelectorをsetImageDrawableに食わせれば良い
Color
プログラムで書く
// 色のセレクター作成
private fun createSelectorColorDrawable(
enableColor: Int,
disableColor: Int
): ColorStateList {
val states = arrayOf(
intArrayOf(-android.R.attr.state_enabled),
intArrayOf(android.R.attr.state_enabled)
)
val colors = intArrayOf(enableColor, disableColor)
return ColorStateList(states, colors)
}
xmlだと、、、
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:state_enabled="true">
<color android:color="@color/red" />
</item>
<item>
<color android:color="@color/green" />
</item>
</selector>
使い方
textView.setTextColor(selector)
createSelectorColorDrawableで作ったのをsetTextColor に食わせれば良い