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?
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?
Cela peut être fait de deux manières (pour soutenir le pré-Lollipop):
Utilisez AppCompatRadioButton
:
AppCompatRadioButton radioButton;
// now use following methods to set tint colour
radioButton.setSupportButtonTintMode();
radioButton.setSupportButtonTintList();
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>
RadioButton raPrivate = (RadioButton) layout.findViewById(R.id.radioPrivate);
int textColor = Color.parseColor(#000000);
raPrivate.setButtonTintList(ColorStateList.valueOf(textColor));
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" />
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>
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>
J'ai fait comme ça:
Capture d'écran
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.
//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);