È possibile modificare l'icona del pulsante di opzione in un gruppo di pulsanti di opzione di Android


95

Voglio consentire all'utente della mia applicazione Android la possibilità di impostare alcuni parametri. Il pulsante di opzione è l'ideale per questa situazione. Tuttavia, non mi piace il rendering dei pulsanti di opzione.

È possibile modificare l'icona del pulsante di opzione? Ad esempio, è possibile creare un layout personalizzato per ogni riga e in quel layout fare riferimento alla mia icona e cambiare il carattere e altri.

Risposte:


168

Sì, è possibile che tu debba definire il tuo stile per i pulsanti di opzione, in res / values ​​/ styles.xml:

<?xml version="1.0" encoding="utf-8"?>
<resources>
<style name="CustomTheme" parent="android:Theme">
   <item name="android:radioButtonStyle">@style/RadioButton</item>
</style>
<style name="RadioButton" parent="@android:style/Widget.CompoundButton.RadioButton">
   <item name="android:button">@drawable/radio</item>
</style>
</resources>

'radio' qui dovrebbe essere un disegnabile con stato, radio.xml:

    <?xml version="1.0" encoding="utf-8"?>
    <selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:state_checked="true" android:state_window_focused="false"
        android:drawable="@drawable/radio_hover" />
    <item android:state_checked="false" android:state_window_focused="false"
        android:drawable="@drawable/radio_normal" />
    <item android:state_checked="true" android:state_pressed="true"
        android:drawable="@drawable/radio_active" />
    <item android:state_checked="false" android:state_pressed="true"
        android:drawable="@drawable/radio_active" />
    <item android:state_checked="true" android:state_focused="true"
        android:drawable="@drawable/radio_hover" />
    <item android:state_checked="false" android:state_focused="true"
        android:drawable="@drawable/radio_normal_off" />
    <item android:state_checked="false" android:drawable="@drawable/radio_normal" />
    <item android:state_checked="true" android:drawable="@drawable/radio_hover" />
    </selector>

Quindi applica il tema personalizzato all'intera app o alle attività di tua scelta.

Per maggiori informazioni su temi e stili guarda http://brainflush.wordpress.com/2009/03/15/understanding-android-themes-and-styles/ che è una buona guida.


13
Puoi anche impostare la proprietà android: button sul pulsante di opzione stesso, invece di definire uno stile personalizzato separato per esso.
Yoni Samlan

7
Vero, ma non è una buona pratica, dal momento che di solito hai più di un solo pulsante di opzione.
Konstantin Burov

@KonstantinBurov e se utilizzo un'immagine di patch 9?
Ade

@KonstantinBurov A meno che tu non stia aggiungendo i pulsanti a livello di programmazione, nel qual caso è fantastico :)
Cornholio

1
Per il tema di supporto potrebbe essere necessario utilizzare <style name = "CustomTheme" parent = "android: Theme"> <item name = "android: radioButtonStyle"> @ style / RadioButton </item> <item name = "radioButtonStyle"> @ style / RadioButton </item> </style>
Dhruv Mevada

30

Puoi inserire un'immagine personalizzata nel pulsante di opzione come un normale pulsante. per questo crea un file XML nella cartella disegnabile es

<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:drawable="@drawable/sub_screens_aus_hl" 
    android:state_pressed="true"/>  
<item android:drawable="@drawable/sub_screens_aus" 
    android:state_checked="true"/>  
<item android:drawable="@drawable/sub_screens_aus" 
    android:state_focused="true" />
<item android:drawable="@drawable/sub_screens_aus_dis" />  
</selector> 

Qui puoi usare 3 diverse immagini per il radiobutton

e usa questo file per RadioButton come:

android:button="@drawable/aus"
android:layout_height="120dp"
android:layout_width="wrap_content" 

13

Il modo più semplice per modificare solo il pulsante di opzione è semplicemente impostare il selettore per disegnare a destra

<RadioButton
    ...
    android:button="@null"
    android:checked="false"
    android:drawableRight="@drawable/radio_button_selector" />

E il selettore è:

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:drawable="@drawable/ic_checkbox_checked" android:state_checked="true" />
    <item android:drawable="@drawable/ic_checkbox_unchecked" android:state_checked="false" /></selector>

È tutto


1
Soluzione migliore, per il mio caso ho anche cambiato 'drawableRight' in 'button' e aggiunto un po 'di padding al selettore xml
F-1

Questa è la migliore soluzione. Sono stato usato in questo modo e funziona bene. Ma dopo la migrazione ad andoidx android: button = "@ null" non funziona e vediamo due icone del pulsante di opzione per ogni elemento! .
maniaq

1

si .... `da Xml

android:button="@drawable/yourdrawable" 

e da Java

myRadioButton.setButtonDrawable(resourceId or Drawable);

"


0

Probabilmente ecco un approccio rapido,

inserisci qui la descrizione dell'immagine

Con due icone mostrate sopra, avrai RadioGroupqualcosa di simile

inserisci qui la descrizione dell'immagine

  • cambia l' RadioGrouporientamento di in orizzontale
  • per ciascuno RadioButton proprietà, prova a fornire l'icona per Button sotto CompoundButton,
  • regolare l'imbottitura e le dimensioni,
  • e impostare l'attributo Sfondo quando selezionato.

0

Nel caso in cui desideri farlo in modo programmatico,

checkBoxOrRadioButton.setButtonDrawable(null);
checkBoxOrRadioButton.setBackgroundResource(R.drawable.resource_name);
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.