2015-03-01 21 views
9

Ben sıradan bir Onay Kutusu görünüm oluşturarak ediyorum:Değişim Onay Kutusu colorAccent programlı

:

<CheckBox 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content"/> 

enter image description here

Bu açık yeşil (# A5D6A7) ana tarzında tanımlanmış vurgu rengi nedeniyle

<style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar"> 
    <item name="colorAccent">@color/green_light</item> 

Bu çalışma süresinde bu stili değiştiremediğimi zaten öğrendim: How to set colorAccent in code?

İstediğim, bu rengi, uygulama genelinde küresel olarak değil belirli bir Checkbox'ta değiştirmektir. Belirli bir varlık oluşturmadan yapabilir miyim? Çünkü kullanıcı çalışma zamanında bu rengi değiştirebilir.

Teşekkürler!

cevap

9

Kullanım AppcompatCheckbox Kodun altında

AppCompatCheckBox acb = (AppCompatCheckBox)findViewById(R.id.acb); 
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.RED //disabled 
        ,Color.BLUE //enabled 

       } 
     ); 

    acb.setSupportButtonTintList(colorStateList); 
+0

normalden daha yavaş olmakla birlikte, yine de çalışır! – Lera

+0

AppCompatCheckBox'u genişletmeye çalışın; daha sonra performans @Lera –

+0

görüyorum artık Android ile irtibatta değilim, bu sorunun cevabını düzeltirse bazılarınız onaylayabilir misiniz? –

10

çek ve checkbox.because checkbox.setSupportButtonTintList (colorStateList) ait işaretini davranışını yavaşlatmadan sorunsuz çalışacaktır; Bazı cihazlarda

ColorStateList colorStateList = new ColorStateList(
         new int[][]{ 
           new int[]{-android.R.attr.state_checked}, // unchecked 
           new int[]{android.R.attr.state_checked} , // checked 
         }, 
         new int[]{ 
           Color.parseColor("#cccccc"), 
           Color.parseColor("##cccccc"), 
         } 
       ); 

CompoundButtonCompat.setButtonTintList(checkBox,colorStateList) 
+0

Sadece bahsettiğiniz "beklenmedik davranışlarla" karşılaştım ve bu kod günü kurtardı! Paylaşım için teşekkürler! –

0

Bu benim için çalışıyor üzerinde beklenmedik davranacaktır: tıklatıp Bu çözüm ile

public void setCheckBoxColor(CheckBox checkBox, int checkedColor, int uncheckedColor) { 
    int states[][] = {{android.R.attr.state_checked}, {}}; 
    int colors[] = {checkedColor, uncheckedColor}; 
    CompoundButtonCompat.setButtonTintList(checkBox, new 
     ColorStateList(states, colors)); 
}