95 votes

Comment appliquer un tableau personnalisé à un RadioButton ?

Il semble que nous puissions utiliser ce qui suit dans un RadioButton :

android:button="@drawable/myCustomStateBackground"

mais ce dessinateur n'occupe que l'endroit où le dessinateur radio devrait normalement aller. Idéalement, je voudrais que l'arrière-plan de mon bouton soit entièrement dynamique. Ainsi, lorsqu'il est enfoncé, je veux que le bouton entier ait l'air d'être bloqué dans l'état enfoncé. Pour cela, j'espérais pouvoir faire quelque chose comme.. :

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

mais l'élément d'arrière-plan ne connaît pas l'état d'activation, contrairement à l'attribut du bouton. Existe-t-il un moyen de contourner ce problème ?

133voto

Benito Bertoli Points 9458

Donnez à votre bouton radio un style personnalisé :

<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>

Remplacez les objets à dessiner par les vôtres.

45voto

Tore Rudberg Points 364

Vous devez définir android:button="@null" au lieu de "null" .

Tu étais si proche !

43voto

Ali Imran Points 3936

Solution complète ici :

<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>

sélecteur 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>

12voto

John smith Points 1240

Si vous voulez changer la seule icône d'un bouton radio, vous pouvez ajouter seulement android:button="@drawable/ic_launcher" à votre bouton radio et pour le rendre sensible au clic, vous devez utiliser le sélecteur

 <?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>

et régler sur votre radio android:background="@drawable/name_of_selector"

0voto

Gayathri Points 76

En programmatique, ajoutez l'image de fond

minSdkVersion 16

RadioGroup rg = new RadioGroup(this);
RadioButton radioButton = new RadioButton(this);
radioButton.setBackground(R.drawable.account_background);
rg.addView(radioButton);

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X