web-dev-qa-db-fra.com

Android: Modifier la couleur des boutons radio et des cases à cocher par programme

J'ai créé RadioButton et CheckBox dans LinearLayout par programme. Mais maintenant, je veux changer la couleur du bouton radio et celle des cases à cocher. j'utilise

RadioButton.setHighlightColor(Color.parseColor("#0c83bd")); 

checkbox.setHighlightColor(Color.parseColor("#0c83bd")); 

Mais ça n'a pas marché. 

9
Amit Desale

Essaye ça

AppCompatRadioButton newRadioButton = new AppCompatRadioButton(this);
AppCompatCheckBox newCheckBox = new AppCompatCheckBox(this);

Au lieu de 

RadioGroup newRadioButton = new RadioGroup(this);
CheckBox newCheckBox = new CheckBox(this);
11
Akshay

Utilisez AppCompatCheckBox et AppCompatRadioButton au lieu de CheckBox et RadioButton . Votre xml aura:

<Android.support.v7.widget.AppCompatCheckBox
    Android:id="@+id/cbSelected"
    Android:layout_width="wrap_content"
    Android:layout_height="wrap_content"
    Android:backgroundTint="@color/colorAccent" //This to set your default button color
    Android:checked="true"/>

<Android.support.v7.widget.AppCompatRadioButton
    Android:id="@+id/rb"
    app:buttonTint="@color/colorAccent" //This to set your default button color
    Android:layout_width="wrap_content"
    Android:layout_height="wrap_content"/>

Passons maintenant au code Java: Create ColorStateList

        ColorStateList colorStateList = new ColorStateList(
                new int[][]{
                        new int[]{Android.R.attr.state_enabled} //enabled
                },
                new int[] {getResources().getColor(R.color.colorPrimary) }
        );

Pour modifier la couleur par programmation pour AppCompatRadioButton ou AppCompatCheckBox call setSupportButtonTintList .

AppCompatRadioButton radioButton = (AppCompatRadioButton) findViewById(R.id.rb);
radioButton.setSupportButtonTintList(colorStateList);

AppCompatCheckBox cbSelected = (AppCompatCheckBox) findViewById(R.id.cbSelected);
cbSelected.setSupportButtonTintList(colorStateList);
17
Rana Ranvijay Singh

Vous pouvez créer une variable RadioButton comme ceci:

RadioButton male = new RadioButton(ReservationContact.this);
male.setTextColor(Color.BLACK);
male.setText("Male");
male.setSelected(true);
male.setId(0);

Ceci est utilisé pour changer la couleur par défaut du cercle de RadioButton.

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Lollipop) {
    male.setButtonTintList(ColorStateList.valueOf(ContextCompat.getColor(ReservationContact.this, R.color.background)));
}
male.setHighlightColor(getResources().getColor(R.color.background));
9
Savita Sharma

Pour CheckBox, remplacez votre CheckBox par AppCompatCheckBox et appelez la méthode suivante:

public static void setCheckBoxColor(AppCompatCheckBox checkBox, int uncheckedColor, int checkedColor) {
    ColorStateList colorStateList = new ColorStateList(
            new int[][] {
                    new int[] { -Android.R.attr.state_checked }, // unchecked
                    new int[] {  Android.R.attr.state_checked }  // checked
            },
            new int[] {
                    uncheckedColor,
                    checkedColor
            }
    );
    checkBox.setSupportButtonTintList(colorStateList);
}

Je pense que cela devrait être similaire pour RadioButton. Vous pouvez vérifier les attributs déclarés dans Android.R.attr et changer le code.

1
ywwynm
   RadioButton rb=(RadioButton) findViewById(R.id.radioButton1);
    rb.setOnCheckedChangeListener(new OnCheckedChangeListener() {

        @Override
        public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
            // TODO Auto-generated method stub
            rb.setButtonDrawable(R.drawable.image);
            rb.setHighlightColor(Color.parseColor("#0c83bd"));


        }
    });
  }
0
Mayuri

Je continue la réponse de ywwynm.

Google a restreint la définition de setSupportButtonTintList, de sorte qu'il n'est pas possible de l'utiliser.

La solution de contournement consiste à utiliser le bouton en tant qu'interface TintableCompoundButton, dans laquelle la méthode n'est pas restreinte.

Fonctionne dans l'API 19+ pour AppCompatRadioButton. AppCompatCheckbox implémente la même interface, elle devrait donc également fonctionner en théorie, mais je ne l'ai pas testée.

S'amuser :)

public static void setAppCompatRadioButtonColor(AppCompatRadioButton radioButton, int uncheckedColor, int checkedColor) {
    ColorStateList colorStateList = new ColorStateList(
            new int[][] {
                    new int[] { -Android.R.attr.state_checked }, // unchecked
                    new int[] {  Android.R.attr.state_checked }  // checked
            },
            new int[] {
                    uncheckedColor,
                    checkedColor
            }
    );
    ((TintableCompoundButton) radioButton).setSupportButtonTintList(colorStateList);
}
0
TSurkis