Je veux changer la couleur du cercle de Bouton radio en un de mes projets mais je n'ai pas compris quelle propriété il fallait définir. La couleur de l'arrière-plan est noire, ce qui le rend invisible. Je veux définir la couleur du cercle en blanc.
Réponses
Trop de publicités?Il est plus simple de définir la couleur du buttonTint (fonctionne uniquement avec le niveau 21 de l'API ou plus) :
<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 valeurs/couleurs.xml mettez votre couleur, dans ce cas un rougeâtre :
<color name="your_color">#e75748</color>
Résultat :
Si vous voulez le faire par code (également API 21 et plus) :
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
}
Mise à jour :
-
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" />
-
Ajoutez ensuite cette ligne dans la mise en page parent ou Alt + Enter dans Android Studio pour ajouter automatiquement
xmlns:app="http://schemas.android.com/apk/res-auto"
A 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>
- Dans votre programme, vous devez l'appeler comme ceci :
AppCompatRadioButton radioButton = (AppCompatRadioButton) view.findViewById(R.id.rbtn_test);
Fondamentalement, ce type de modèle peut être appliqué à tous les types d'AppCompact tels que AppCompatCheckBox, AppCompatButton, et ainsi de suite.
Vieille réponse :
Afin de prendre en charge les fonctions inférieures à l'API 21 d'Android, vous pouvez utiliser la fonction AppCompatRadioButton. Ensuite, utilisez setSupportButtonTintList
pour changer la couleur. Voici 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 :
Voir l'Android lien de référence pour plus de détails.
Cela fonctionne sur l'API pré 21 ainsi que post 21.
Dans votre styles.xml
mettre :
<!-- 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 bouton radio en XML devrait ressembler à ceci :
<RadioButton
android:layout_width="wrap_content"
style="@style/radionbutton"
android:checked="false"
android:layout_height="wrap_content"
/>
Maintenant, tout ce que vous devez faire est de créer un radiobutton_drawable.xml
dans votre 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 fichier :
<?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 fichier :
<?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>
Il suffit de remplacer @color/colorAccent
avec la couleur de votre choix.
-
Déclarez un style personnalisé dans votre styles.xml fichier.
<style name="MyRadioButton" parent="Theme.AppCompat.Light"> <item name="colorControlNormal">@color/indigo</item> <item name="colorControlActivated">@color/pink</item> </style>
-
Appliquez ce style à votre RadioButton par le biais de la fonction Android:thème attribut.
<RadioButton android:layout_width="wrap_content" android:layout_height="wrap_content" android:checked="true" android:text="Radio Button" android:theme="@style/MyRadioButton"/>
Mais seulement si votre activité s'étend AppCompatActivity
.
- Réponses précédentes
- Plus de réponses