[Android]ボタン選択時に背景画像とテキスト色を同時に変更する方法


つまり以下の様なことがやりたい

ボタン選択時の背景画像を変更し、同時に文字の色を白にする。

<Button
    android:id="@+id/r_time_5"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="5分以内"
    android:textColor="@drawable/refine_button_selector"
    android:background="@drawable/refine_button_selector"/>

上記のように、textColorとbackgroundにselectorを記載したファイル名を指定しておく


refine_button_selector.xmlにて、「state_selected」を設定し、選択中かそれ以外かを判定できるように。drawableに画像、colorに文字色をそれぞれ設定する

refine_button_selector.xml
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:drawable="@drawable/select_btn_off" android:color="@color/black" android:state_selected="false" />
    <item android:drawable="@drawable/select_btn_on" android:color="@color/white" android:state_selected="true" />
</selector>


あとはonClickで処理してやるだけ

rTime5 = findViewById(R.id.r_time_5);
rTime5.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View v) {
        v.setSelected(!v.isSelected());
        if(v.isSelected()){
            //・・・選択時に行いたい処理・・・
        }
    }
});

たまに実装しようとした際に迷うので備忘としてあげておきます