Changer la couleur du cercle du bouton radio

158

Je souhaite changer la couleur du cercle de RadioButton dans l'un de mes projets , je ne comprenais pas quelle propriété définir. La couleur de fond que j'ai est noire, donc elle devient invisible. Je souhaite définir la couleur du cercle sur blanc.

Amandeep Singh
la source
référez-vous à ce lien: heliodorj.blogspot.in/2009/04/…
Développeur Android
Utilisez deux images pour le bouton radio, un est sélectionné et un autre ne l'est pas, chane ces images sur Radiobutton cliquez soit en utilisant la ressource setbackground ou en utilisant le sélecteur xml.
SAURABH_12

Réponses:

288

Plus simple, il suffit de définir le bouton Couleur de la teinte: (fonctionne uniquement au niveau de l'API 21 ou supérieur)

<RadioButton
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:id="@+id/radio"
    android:checked="true"
    android:buttonTint="@color/your_color"/>

dans votre values ​​/ colors.xml mettez votre couleur dans ce cas une couleur rougeâtre:

<color name="your_color">#e75748</color>

Résultat:

Bouton radio Android coloré

Si vous souhaitez le faire par code (également api 21 et supérieur):

if(Build.VERSION.SDK_INT>=21)
{

    ColorStateList colorStateList = new ColorStateList(
            new int[][]{

                    new int[]{-android.R.attr.state_enabled}, //disabled
                    new int[]{android.R.attr.state_enabled} //enabled
            },
            new int[] {

                    Color.BLACK //disabled
                    ,Color.BLUE //enabled

            }
        );                       


    radio.setButtonTintList(colorStateList);//set the color tint list
    radio.invalidate(); //could not be necessary
}
Jorge Arimany
la source
1
@emaillenin, si vous voulez changer la teinte de couleur par code, vous devez utiliser control.getDrawable().setColorFilter(getResources().getColor(color), PorterDuff.Mode.SRC_IN);controlest le contrôle que vous voulez changer la teinte et colorest une valeur entière de la couleur que vous voulez, par exempleR.color.red
Jorge Arimany
1
@JorgeArimany Pour un RadioButton, est-ce getButtonDrawable ou getCompoundDrawables? getCompoundDrawables renvoie une liste
Lenin Raj Rajasekaran
@emaillenin, merci, ma réponse à votre commentaire était pour d'autres contrôles comme un bouton, j'ai mis à jour ma réponse en ajoutant le code que vous recherchez, j'espère que cela vous aidera
Jorge Arimany
3
@JorgeArimany Je l'ai déjà travaillé pour> 21 ans .. Je cherche des réponses spécifiquement pour <21
Lenin Raj Rajasekaran
Pour changer la couleur d'un bouton coché, vous pouvez ajouter ou remplacer un état par android.R.attr.state_checkedet ajouter la couleur.
6rchid le
160

Mise à jour: 1. utilisez plutôt celui-ci

   <android.support.v7.widget.AppCompatRadioButton
        android:id="@+id/rbtn_test"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        app:buttonTint="@color/primary" />

2. Ajoutez ensuite cette ligne dans la mise en page parent ou Alt + Enter dans Android Studio pour l'ajouter automatiquement xmlns:app="http://schemas.android.com/apk/res-auto"

L'exemple minimum devrait ressembler à ceci:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical">

    <android.support.v7.widget.AppCompatRadioButton
        android:id="@+id/rbtn_test"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        app:buttonTint="@color/primary" />

</LinearLayout>

3. Dans votre programme, devrait appeler comme ceci. AppCompatRadioButton radioButton = (AppCompatRadioButton) view.findViewById(R.id.rbtn_test);

Fondamentalement, ce type de modèle peut être appliqué à tous les types AppCompact tels que AppCompatCheckBox, AppCompatButton, etc.

Ancienne réponse:

Afin de prendre en charge ci-dessous l'API Android 21, vous pouvez utiliser AppCompatRadioButton. Ensuite, utilisez la setSupportButtonTintListméthode pour changer la couleur. Ceci est mon extrait de code pour créer un bouton radio.

    AppCompatRadioButton rb;
    rb = new AppCompatRadioButton(mContext);

    ColorStateList colorStateList = new ColorStateList(
            new int[][]{
                    new int[]{-android.R.attr.state_checked},
                    new int[]{android.R.attr.state_checked}
            },
            new int[]{

                    Color.DKGRAY
                    , Color.rgb (242,81,112),
            }
    );
    rb.setSupportButtonTintList(colorStateList);

Résultat testé à l'API 19:

Celui-ci est testé sur l'API 19

Voir le lien de référence Android pour plus de détails.

aknay
la source
10
Cette réponse devrait être celle acceptée. Si vous souhaitez ajouter ce bouton radio de support via xml, utilisez<android.support.v7.widget.AppCompatRadioButton ../>
Vinayak Garg
22
setSupportButtonTintListest une méthode privée que vous n'avez pas l'intention d'utiliser. Les boutons radio se comportent bizarrement sur certaines versions d'Android. Utilisez plutôt CompoundButtonCompat.setButtonTintList(rb, colorStateList).
wampastompa
2
@wampastompa a raison. Sur l'API 22, le résultat est que je n'ai vu qu'un cercle extérieur, jamais rempli une fois coché. @aknay; Veuillez mettre à jour votre réponse
Nino van Hooff
1
Je suis sur l'API 16. J'ajoute les boutons radio AppCompat comme indiqué ci-dessus, mais il ne s'affiche toujours pas correctement.
tccpg288
1
vous n'avez besoin d'aucun code, voyez la réponse d'IgorOliveira. Fonctionne pour toutes les versions.
Kirill Karmazin
77
<android.support.v7.widget.AppCompatRadioButton
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    app:buttonTint="@color/Color" />
IgorOliveira
la source
11
C'est la réponse pour les appareils pré, actuels et post lollypop !! Super
sdelvalle57
1
Cela devrait être la réponse acceptée. Court et parfait. REMARQUE: utilisez l'application: buttonTint = "@ color / Color" mais pas andoid: buttonTint = "@ color / Color"!
Kirill Karmazin
@KirillKarmazin accepté devrait être ce qui fonctionne pour <21
user924
56

Travailler sur l'API avant 21 et après 21. Dans votre article styles.xml:

<!-- custom style -->
<style name="radionbutton"
       parent="Base.Widget.AppCompat.CompoundButton.RadioButton">
    <item name="android:button">@drawable/radiobutton_drawable</item>
    <item name="android:windowIsTranslucent">true</item>
    <item name="android:windowBackground">@android:color/transparent</item>
    <item name="android:windowContentOverlay">@null</item>
    <item name="android:windowNoTitle">true</item>
    <item name="android:windowIsFloating">false</item>
    <item name="android:backgroundDimEnabled">true</item>
</style>

Votre radio buttonin xml devrait ressembler à:

<RadioButton
    android:layout_width="wrap_content"
    style="@style/radionbutton"
    android:checked="false"
    android:layout_height="wrap_content"
    />

Il ne vous reste plus radiobutton_drawable.xmlqu'à créer un fichier drawable folder. Voici ce que vous devez y mettre:

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

Votre radio_unchecked.xml:

<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
  android:shape="oval">
  <stroke android:width="1dp" android:color="@color/colorAccent"/>
  <size android:width="30dp" android:height="30dp"/>
</shape>

Votre radio_checked.xml:

<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
  <item>
    <shape android:shape="oval">
      <stroke android:width="1dp" android:color="@color/colorAccent"/>
      <size android:width="30dp" android:height="30dp"/>
    </shape>
  </item>
  <item android:top="5dp" android:bottom="5dp" android:left="5dp" android:right="5dp">
    <shape android:shape="oval">
      <solid android:width="1dp" android:color="@color/colorAccent"/>
      <size android:width="10dp" android:height="10dp"/>
    </shape>
  </item>
</layer-list>

Remplacez simplement @color/colorAccentpar la couleur de votre choix.

Vaibhav Sharma
la source
Comment pourrais-je faire cela par programme?
tccpg288
@ tccpg288 Si vous utilisez ce xml et si vous voulez changer la couleur par programme, utilisez simplement radioButton.setChecked (false) ou radioButton.setChecked (true)
Vaibhav Sharma
Je ne comprends pas votre question. Pouvez-vous s'il vous plaît élaborer?
Vaibhav Sharma
Mon erreur, est-ce important si j'utilise le RadioButton normal ou le RadioButton AppCompat?
tccpg288
1
Cela ne fonctionne pas, qu'en est-il lorsque j'initialise le RadioButton? Voici mon code: mPollAnswerArrayList.add ((indexCreated), new RadioButton ((getActivity (). GetApplicationContext ()), null, R.style.radiobutton));
tccpg288
18

Vous devez utiliser ce code:

<android.support.v7.widget.AppCompatRadioButton
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:buttonTint="@color/black"
                    android:text="Radiobutton1"
                    app:buttonTint="@color/black" />

Utiliser app:buttonTintau lieu de android:buttonTintet aussi android.support.v7.widget.AppCompatRadioButtonau lieu de Radiobutton!

srt
la source
16
  1. Déclarez un style personnalisé dans votre fichier styles.xml.

    <style name="MyRadioButton" parent="Theme.AppCompat.Light">  
      <item name="colorControlNormal">@color/indigo</item>
      <item name="colorControlActivated">@color/pink</item>
    </style>  
  2. Appliquez ce style à votre RadioButton via l'attribut android: theme.

    <RadioButton  
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:checked="true"
        android:text="Radio Button"
        android:theme="@style/MyRadioButton"/>

    seulement si votre activité s'étend AppCompatActivity

batsheva
la source
1
Cela devrait être accepté comme une réponse, cela fonctionne sur toutes les versions et c'est le plus propre
Antonis Radz
J'ai dû l'utiliser <item name="android:colorControlActivated">@color/pink</item>pour que cela fonctionne pour moi. Je ne sais toujours pas pourquoi. Sinon, c'est une bonne réponse.
Taylor Venissat le
16

Pour sous API 21

Créer un style personnalisé RadioButton style.xml

 <style name="RadioButton" parent="Theme.AppCompat.Light">
     <item name="colorAccent">@color/green</item>
     <item name="android:textColorSecondary">@color/mediumGray</item>
     <item name="colorControlNormal">@color/red</item>
 </style>

Dans la mise en page, utilisez le thème:

<RadioButton
       android:layout_width="wrap_content"
       android:layout_height="wrap_content"
       android:theme="@style/RadioButton" />

Pour API 21 et plus

Utilisez simplement buttonTint

 <RadioButton
       android:layout_width="wrap_content"
       android:layout_height="wrap_content"
       android:buttonTint="@color/green" />
Rasoul Miri
la source
Doit être clarifié: buttonTint fonctionne pour l'API 21 et les applications qui utilisent AppCompat / AndroidX, peu importe l'API
Chisko
12

La question est ancienne mais je pense que ma réponse aidera les gens. Vous pouvez modifier la couleur de l'état non coché et coché du bouton radio en utilisant le style en xml.

<RadioButton
    android:id="@+id/rb"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:theme="@style/RadioButtonStyle" />

Dans style.xml

<style name="RadioButtonStyle" parent="Theme.AppCompat.Light">
        <item name="colorAccent">@android:color/white</item>
        <item name="android:textColorSecondary">@android:color/white</item>
</style>

Vous pouvez définir les couleurs souhaitées dans ce style.

Jaura
la source
Le thème à l'intérieur du RadioButton ne fonctionne pas (plus?). Il se bloque en cliquant sur le bouton, car la méthode onClick n'est pas trouvée, bien qu'elle soit ici.
Bevor
ce problème aura une autre raison. Assurez-vous d'obtenir l'ID de la vue correcte avant d'implémenter onClick sur cette vue.
Jaura
9

Définissez la buttonTintpropriété. Par exemple android:buttonTint="#99FF33",.

Sablonneux
la source
9
Ce n'est qu'après l'API 21
miracle-doh
7

Je l'ai fait court comme ça (Travailler sur l'API avant 21 ainsi que après 21)

Votre bouton radio en XML devrait ressembler à ceci

  <RadioButton android:id="@+id/radioid"                    
                android:layout_height="wrap_content"
                android:layout_width="wrap_content"                 
                android:button="@drawable/radiodraw" />

dans radiodraw.xml

  <?xml version="1.0" encoding="utf-8"?>
  <selector xmlns:android="http://schemas.android.com/apk/res/android">    
      <item android:state_checked="false" >
          <shape  android:shape="oval" >
              <stroke android:width="1dp" android:color="#000"/>
              <size android:width="30dp" android:height="30dp"/>
              <solid android:color="@android:color/transparent"/>
          </shape>
      </item>
      <item android:state_checked="true">
          <layer-list>
              <item>
                  <shape android:shape="oval">
                      <stroke android:width="1dp" android:color="#000"/>
                      <size android:width="30dp" android:height="30dp"/>
                      <solid android:color="@android:color/transparent"/>
                  </shape>
              </item>
              <item android:top="5dp" android:bottom="5dp" android:left="5dp" android:right="5dp">
                  <shape android:shape="oval">
                      <solid android:width="1dp" android:color="#000"/>
                      <size android:width="10dp" android:height="10dp"/>
                  </shape>
              </item>
          </layer-list>
      </item>
  </selector>

devez ajouter une couleur transparente pour dessiner l'état non coché; sinon, il dessine un ovale noir uni.

Hatem Badawi
la source
6

Parfois, il vous suffit de remplacer colorControlNormal comme ceci:

    <style name="RadioButtonStyle" parent="AppTheme">
       <item name="colorControlNormal">@color/pink</item>
       <item name="colorAccent">@color/colorPrimary</item>
       <item name="android:textColorSecondary">@color/black</item>
    </style>

Et vous obtiendrez un bouton comme celui-ci:

entrez la description de l'image ici

colorControlNormal utilisé pour l'état non vérifié et colorAccent pour vérifié.

Nosov Pavel
la source
5

Il y a un attribut xml pour cela:

android:buttonTint="yourcolor"
l'apprenant
la source
Assurez-vous que votre API min est supérieure à 21
sinon
vous pouvez utiliser ceci pour la compatibilité descendante: app: buttonTint = "your_color"
Mridul Das
"Make sure your min API is higher then 21 or this won't work"c'est faux. Je cible l'API 17 avec AndroidX et c'est la seule chose qui a fonctionné pour moi
Chisko
3

Pour ceux qui souhaitent modifier les états de désactivation, coché et activé, procédez comme suit:

<!-- Or androidX radio button or material design radio button -->
<android.support.v7.widget.AppCompatRadioButton
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:buttonTint="@color/black"
                    android:text="Radiobutton1"
                    app:buttonTint="@color/radio_button_color" />

puis dans le dossier color res, créez un fichier nommé "radio_button_color.xml":

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:color="@color/yellow900" android:state_selected="true" />
    <item android:color="@color/yellow800" android:state_checked="true" />
    <item android:color="@color/gray800" android:state_enabled="false" />
    <item android:color="@color/yellow800" android:state_enabled="true" />
</selector>
Saman Sattari
la source
2
<RadioButton
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:id="@+id/radio"
    android:buttonTint="@color/my_color"/>

Tout le bouton changera de couleur, la boîte de cercle et le chèque central.

texeratx
la source
1
Mais pas l'ondulation ;-)
Waza_Be
1

RadioButton prend par défaut la couleur de colorAccent dans le fichier res / values ​​/ colors.xml. Allez donc dans ce fichier et modifiez la valeur de

<color name="colorAccent">#3F51B5</color>

à la couleur souhaitée.

Velmurugan V
la source
0

Le moyen le plus simple est de changer la colourAccentcouleur, values->colours.xml
mais sachez que cela changera également d'autres choses comme modifier la couleur du curseur de texte, etc.

< color name="colorAccent">#75aeff</color >

Manohar Reddy
la source
0

Si vous souhaitez définir une couleur différente pour le bouton radio cliqué et non cliqué, utilisez simplement:

   android:buttonTint="@drawable/radiobutton"  in xml of the radiobutton and your radiobutton.xml will be:  
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:state_pressed="true" android:color="#1E88E5"/>
<item android:state_checked="true" android:color="#00e676"/>
<item android:color="#ffffff"/>

anju jo
la source
0

utilisez simplement l' android:buttonTint="@color/colorPrimary"attribut sur la balise, j'espère que cela vous aidera

Cevin Ways
la source
0

J'ai eu ce problème. Si votre application a un arrière-plan noir et que vous avez beaucoup de RadioButtons invisibles à cause de l'arrière-plan, il est compliqué d'éditer le android: buttonTint de chacun, la meilleure solution est de changer le thème parent dans votre fichier styles.xml

j'ai changé

<style name="AppTheme" parent="Theme.AppCompat.Light.NoActionBar">

à

<style name="AppTheme" parent="Theme.AppCompat.NoActionBar">

Ainsi, les cercles des RadioButtons sont devenus une teinte plus claire de gris et maintenant ils sont visibles même avec un fond noir.

Voici mon fichier style.xml:

<resources>

<!-- Base application theme. -->
<style name="AppTheme" parent="Theme.AppCompat.NoActionBar">
    <!-- Customize your theme here. -->
    <item name="colorPrimary">@color/colorPrimary</item>
    <item name="colorPrimaryDark">@color/colorPrimaryDark</item>
    <item name="colorAccent">@color/colorAccent</item>
</style>

Willian S. Praciano
la source
-4

@ jh314 est correct. Dans AndroidManifest.xml,

 <application
    android:allowBackup="true"
    android:icon="@drawable/icon"
    android:label="@string/app_name"
    android:theme="@style/AppTheme"></application>

Dans style.xml

  <!-- Application theme. -->
<style name="AppTheme" parent="Theme.AppCompat.Light.NoActionBar">
    <item name="colorAccent">@color/red</item>
    <!-- All customizations that are NOT specific to a particular API-level can go here. -->
</style>

le nom de l'élément doit être colorAccent, il décide de la couleur par défaut des widgets de l'application.

Mais si vous voulez changer la couleur du code, la réponse de Maybe @ aknay est correcte.

Iturbo
la source
Cela ne répond pas à la question. Une fois que vous aurez une réputation suffisante, vous pourrez commenter n'importe quel message ; à la place, fournissez des réponses qui ne nécessitent pas de clarification de la part du demandeur . - De l'avis
semirturgay
Ma réponse est de changer la couleur de base de l'application et bien sûr, elle peut changer la couleur du bouton radio en blanc.
Iturbo