2015-12-17 13 views
5

Sto usando la vista CheckBox in Android. Mi piacerebbe cambiare il colore di esso quando è controllato. In questo momento è il suo colore verde scuro di default quando è spuntato e vorrei cambiarlo in qualcosa di diverso e quando non selezionato, sono solo i colori di default.Come cambiare la casella di spunta a colori programmaticamente

Ecco il mio codice:

CheckBox c = new CheckBox(this); 
c.setId(View.generateViewId()); 

c.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() { 
    @Override 
    public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) { 
     if(buttonView.isChecked()) 
     { 
      buttonView.setBackgroundColor(Color.rgb(64, 131, 207)); 
     } 
     if(!buttonView.isChecked()) 
     { 
      buttonView.setBackgroundColor(Color.WHITE); 
     } 

    } 
}); 

Il problema è che non cambia la cosa giusta. Qualche idea su come cambiare questo colore?

enter image description here

risposta

-2

Forse si tenta di creare un selector e assegnare questo selector al CheckBox in questo modo, per esempio:

//drawable file called cb_selector 
<?xml version="1.0" encoding="utf-8"?> 
<selector xmlns:android="http://schemas.android.com/apk/res/android"> 
    <item android:state_checked="true" android:drawable="@drawable/checked" /> 
    <item android:state_checked="false" android:drawable="@drawable/unchecked" /> 
</selector> 

Nel file di layout applicare questo file sul checkBox

<CheckBox 
    android:id="@+id/myCheckBox" 
    android:text="My CheckBox" 
    android:button="@drawable/cb_selector" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content"/> 

@drawable/checked e @drawable/unchecked sono due ima GES della vostra casella di controllo, così si potrebbe mettere lì un colore che si desidera

o senza cambiare la disposizione dei pulsanti, con l'aggiunta di questo attributo al vostro casella

android:buttonTint="@color/YOUR_CHECKMARK_COLOR_HERE" 
+0

Grazie. Sembra che funzionerà. – user1197993

+0

Prego :)) –

+0

Questa soluzione non funzionerà per il livello API 17 (e probabilmente qualsiasi cosa al di sotto dell'API 21) – Boon

0
implement this file in res 

<?xml version="1.0" encoding="utf-8"?> 

<selector xmlns:android="http://schemas.android.com/apk/res/android"> 
<item android:state_checked="true" android:state_focused="true" 
    android:drawable="@drawable/checkbox_on_background_focus_yellow" /> 
<item android:state_checked="false" android:state_focused="true" 
    android:drawable="@drawable/checkbox_off_background_focus_yellow" /> 
<item android:state_checked="false" 
    android:drawable="@drawable/checkbox_off_background" /> 
<item android:state_checked="true" 
    android:drawable="@drawable/checkbox_on_background" /> 
</selector> 



and then add button to checkbox 

<CheckBox android:layout_width="wrap_content" 
android:layout_height="wrap_content" 
android:text="new checkbox" 
android:background="@drawable/checkbox_background" 
android:button="@drawable/checkbox" /> 
7

sostituire il vostro CheckBox con AppCompatCheckBox e call seguente metodo:

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); 
} 
+0

ha funzionato correttamente! +1 – marlonpya

+2

L'ultima riga deve essere 'CompoundButtonCompat.setButtonTintList (checkBox, colorStateList)' –

+0

Se non funziona, racchiudere 'uncheckedColor' con' ContextCompat.getColor (checkBox.getContext, uncheckedColor) 'e lo stesso con checkedColor – Linxy

2

per colorare le tinte CompoundButton provare questo, sia per il API> 21 e sotto.

if (Build.VERSION.SDK_INT < 21) { 
    CompoundButtonCompat.setButtonTintList(button, ColorStateList.valueOf(tintColor));//Use android.support.v4.widget.CompoundButtonCompat when necessary else 
} else { 
    button.setButtonTintList(ColorStateList.valueOf(tintColor));//setButtonTintList is accessible directly on API>19 
} 
Problemi correlati