RadioButton – как использовать пользовательский доступный?

Похоже, мы можем использовать следующее в RadioButton:

android:button="@drawable/myCustomStateBackground" 

Но этот доступный только занимает место, где обычно будет проходить радиопередача. В идеале я хочу, чтобы весь фон на кнопке был сдержанным. Поэтому, когда нажата, я хочу, чтобы вся кнопка выглядела так, как будто она застряла в нажатом состоянии. Для этого я надеялся, что смогу сделать что-то вроде:

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

Но тогда фоновый чертеж не знает о состоянии нажатия, как это делает атрибут кнопки. Есть ли способ обойти это?

Solutions Collecting From Web of "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> 

Замените чертежи своими собственными.

Вы должны установить android:button="@null" вместо "null" .

Вы были очень близки!

Полное решение здесь:

 <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" радио android:background="@drawable/name_of_selector"