[Android] BitmapやColorのSelectorをxmlではなくプログラムで書く

タイトル通り。

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 に食わせれば良い

タイトルとURLをコピーしました