RadioButton-как использовать пользовательский drawable?
похоже, что мы можем использовать следующее В RadioButton:
android:button="@drawable/myCustomStateBackground"
но этот drawable занимает только то место, где обычно идет радио drawable. В идеале я хочу, чтобы весь мой фон кнопки был статусным. Поэтому при нажатии я хочу, чтобы вся кнопка выглядела так, как будто она застряла в нажатом состоянии. Чтобы сделать это, я надеялся, что смогу сделать что-то вроде:
android:button="null"
android:background="@drawable/myCustomStateBackground"
но тогда фон drawable не знает о состоянии push, как атрибут button делает. Есть ли способ обойти это?
4 ответов:
дайте вашему 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>замените чертежи на свои собственные.
полное решение здесь:
<RadioGroup android:id="@+id/radioGroup1" android:layout_width="wrap_content" android:layout_height="wrap_content" > <RadioButton android:id="@+id/radio0" android:layout_width="wrap_content" android:layout_height="wrap_content" android:button="@drawable/oragne_toggle_btn" android:checked="true" android:text="RadioButton" /> <RadioButton android:id="@+id/radio1" android:layout_width="wrap_content" android:layout_height="wrap_content" android:button="@drawable/oragne_toggle_btn" android:layout_marginTop="20dp" android:text="RadioButton" /> <RadioButton android:id="@+id/radio2" android:layout_width="wrap_content" android:layout_height="wrap_content" android:button="@drawable/oragne_toggle_btn" android:layout_marginTop="20dp" android:text="RadioButton" /> </RadioGroup>селектор XML
<?xml version="1.0" encoding="utf-8"?> <selector xmlns:android="http://schemas.android.com/apk/res/android"> <item android:drawable="@drawable/orange_btn_selected" android:state_checked="true"/> <item android:drawable="@drawable/orange_btn_unselected" android:state_checked="false"/> </selector>
Если вы хотите изменить только значок переключателя, то вы можете добавить только
android:button="@drawable/ic_launcher"к вашему переключателю и для того, чтобы сделать чувствительным на щелчок, то вы должны использовать селектор<?xml version="1.0" encoding="utf-8"?> <selector xmlns:android="http://schemas.android.com/apk/res/android"> <item android:drawable="@drawable/image_what_you_want_on_select_state" android:state_checked="true"/> <item android:drawable="@drawable/image_what_you_want_on_un_select_state" android:state_checked="false"/> </selector>и установить на радио
android:background="@drawable/name_of_selector"
Comments