web-dev-qa-db-fra.com

Impossible de changer la couleur du bouton radio sur Android

J'utilise Android Studio. Je dois changer la couleur du bouton radio. Après avoir modifié la valeur Button Tint Color (Couleur de teinte du bouton), celle-ci convient à l'aperçu. Toutefois, chaque fois que je lance l'application sur un appareil, le bouton est de couleur standard vert/bleu.

Est-ce un problème de niveau API de périphérique? Si oui, est-il possible de changer la couleur pour les appareils plus anciens?

12
Freguglia

Après avoir lu la réponse de @Ranjith, j'ai creusé un peu et cela a semblé fonctionner. Ajoutez-le simplement à votre AppTheme.

    //red is the color of the pressed state and activated state
    <item name="colorControlActivated">@Android:color/holo_red_light</item>
    //black is the color of the normal state
    <item name="colorControlNormal">@Android:color/black</item>

Ma question est la suivante: comment faites-vous cela par programmation, car j'ai des boutons radio dynamiques?

18
user2968401

Cela peut être fait de deux manières (pour soutenir le pré-Lollipop):

  1. Utilisez AppCompatRadioButton:

    AppCompatRadioButton radioButton;
    // now use following methods to set tint colour
    radioButton.setSupportButtonTintMode();
    radioButton.setSupportButtonTintList();
    
  2. Appliquez ceci comme style à votre RadioButton dans votre XML:

    <style name="RadioButton.Login" parent="Widget.AppCompat.CompoundButton.RadioButton">
        <item name="Android:textColor">@Android:color/white</item>
        <item name="buttonTint">@Android:color/white</item>
    </style>
    
9
Sufian
RadioButton raPrivate = (RadioButton) layout.findViewById(R.id.radioPrivate);
int textColor = Color.parseColor(#000000);
raPrivate.setButtonTintList(ColorStateList.valueOf(textColor));
5
BooNonMooN

Pas besoin de style supplémentaire. Android le prend en charge via xml . Ajoutez simplement Android: buttonTint = "@ color/yourColor" dans votre bouton radio.

Pour par exemple.

<RadioButton
 Android:layout_width="wrap_content"
 Android:layout_height="wrap_content"
 Android:buttonTint="@color/red"
 Android:text="Upload"
 Android:textColor="@color/text_dark_gray"
 Android:textSize="14sp" />
3
Kuldeep Sakhiya

Si vous souhaitez modifier la couleur sans modifier colorControlActivated ni colorControlNormal pour l'ensemble de l'application, vous pouvez remplacer votre application uniquement pour le bouton radio en créant un nouveau style:

<Android.support.v7.widget.AppCompatRadioButton
    Android:layout_width="wrap_content"
    Android:layout_height="wrap_content"
    Android:layout_centerVertical="true"
    Android:layout_alignParentEnd="true"
    Android:theme="@style/RadioButtonTheme"
    Android:id="@+id/radioButton"/>



<style name="RadioButtonTheme" parent="@style/AppTheme">
    <item name="colorControlActivated">@color/colorAccent</item>
    <item name="colorControlNormal">@color/colorPrimaryDark</item>
</style>
3
luca992

En supposant que vous utilisez appcompat dans votre application, ajoutez ce qui suit dans styles.xml

<item name="colorAccent">@color/blue</item>

Maintenant que la couleur bleue sera définie, il suffit de changer de couleur pour choisir la couleur de votre choix.

Par exemple, le style entier.xml

<resources>
    <style name="AppTheme" parent="Theme.AppCompat.Light.NoActionBar">
        <item name="colorPrimary">@color/accent_material_dark</item>
        <item name="colorPrimaryDark">@color/accent_color_dark</item>
        <item name="colorAccent">@color/accent_color</item>
        <item name="windowActionBar">false</item>
    </style>
</resources>
2
Psypher

J'ai fait comme ça:

Capture d'écran

 enter image description here

activity_main.xml

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:Android="http://schemas.Android.com/apk/res/Android"
    xmlns:app="http://schemas.Android.com/apk/res-auto"
    xmlns:tools="http://schemas.Android.com/tools"
    Android:layout_width="match_parent"
    Android:layout_height="match_parent"
    app:layout_behavior="@string/appbar_scrolling_view_behavior"
    tools:context=".MainActivity"
    tools:showIn="@layout/app_bar_main">

    <RadioGroup
        Android:id="@+id/radioGroup"
        Android:layout_width="wrap_content"
        Android:layout_height="wrap_content">


    </RadioGroup>

</RelativeLayout>

MainActivity.Java

public class MainActivity extends AppCompatActivity
        implements NavigationView.OnNavigationItemSelectedListener {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
        setSupportActionBar(toolbar);


        RadioGroup radioGroup = (RadioGroup) findViewById(R.id.radioGroup);

        /**
         * First Radio Buttonn
         */
        RadioButton radioButtonAndroid = (RadioButton) getLayoutInflater().inflate(R.layout.custom_radiobutton, null);
        radioButtonAndroid.setText("Hello Android");
        radioGroup.addView(radioButtonAndroid);

        /**
         * Second Radio Buttonn
         */
        RadioButton radioButtonIos = (RadioButton) getLayoutInflater().inflate(R.layout.custom_radiobutton, null);
        radioButtonIos.setText("Hello Ios");
        radioGroup.addView(radioButtonIos);
    }
}

custom_radiobutton.xml

<?xml version="1.0" encoding="utf-8"?>
<RadioButton xmlns:Android="http://schemas.Android.com/apk/res/Android"
    Android:layout_width="match_parent"
    Android:layout_height="match_parent"
    Android:buttonTint="@color/colorPrimary"
    Android:text="">

</RadioButton>

J'espère que ceci vous aidera.

1
Hiren Patel
//red is the color of the pressed state and activated state
<item name="colorControlActivated">@Android:color/holo_red_light</item>
//black is the color of the normal state
<item name="colorControlNormal">@Android:color/black</item>

De: user2968401

Une fois que vous avez différents styles pour le bouton radio, vous pouvez les échanger en les affectant à un nouveau bouton radio avec le style déjà défini sur le nouveau style:

(RadioButton)layout.findViewById(R.id.radioButton) = new RadioButton(this, null, R.style.RadioButton_style);
0
Error 404