1. ホーム
  2. android

[解決済み] RadioButtonにカスタムDrawableを適用するには?

2023-04-27 10:42:08

質問

RadioButtonで以下のように使えそうです。

android:button="@drawable/myCustomStateBackground"

が、このdrawableは通常radio drawableが入るであろう場所を占めるだけです。理想的には、ボタンの背景全体がステートフルになるようにしたいです。つまり、押されたとき、ボタン全体が押された状態で止まっているように見えるようにしたいのです。それを行うには、私は次のようなことを行うことができることを期待していました。

android:button="null"
android:background="@drawable/myCustomStateBackground"

というような書き方をしていますが、これではbutton属性のようにbackground drawableが押下状態を知ることができません。これを回避する方法はあるのでしょうか?

どのように解決するのですか?

radiobuttonにカスタムスタイルを設定します。

<style name="MyRadioButtonStyle" parent="@android:style/Widget.CompoundButton.RadioButton">
    <item name="android:button">@drawable/custom_btn_radio</item>
</style>

custom_btn_radio.xml

<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:state_checked="true" android:state_window_focused="false"
          android:drawable="@drawable/btn_radio_on" />
    <item android:state_checked="false" android:state_window_focused="false"
          android:drawable="@drawable/btn_radio_off" />

    <item android:state_checked="true" android:state_pressed="true"
          android:drawable="@drawable/btn_radio_on_pressed" />
    <item android:state_checked="false" android:state_pressed="true"
          android:drawable="@drawable/btn_radio_off_pressed" />

    <item android:state_checked="true" android:state_focused="true"
          android:drawable="@drawable/btn_radio_on_selected" />
    <item android:state_checked="false" android:state_focused="true"
          android:drawable="@drawable/btn_radio_off_selected" />

    <item android:state_checked="false" android:drawable="@drawable/btn_radio_off" />
    <item android:state_checked="true" android:drawable="@drawable/btn_radio_on" />
</selector>

drawablesを自分のものに置き換える。