2015-03-01 8 views
9

मैं एक साधारण चेकबॉक्स दृश्य बना रहा हूं:क्रम में बदलें चेकबॉक्स colorAccent प्रोग्राम के रूप में

:

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

enter image description here

यह हल्के हरे रंग (# A5D6A7) उच्चारण रंग मुख्य शैली में परिभाषित वजह से है

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

मुझे पहले से ही पता चला है कि मैं इस शैली को रनटाइम में नहीं बदल सकता: How to set colorAccent in code?

मैं इस रंग को एक विशिष्ट चेकबॉक्स पर बदलना चाहता हूं, न कि ऐप पर वैश्विक स्तर पर। क्या मैं इसे एक विशिष्ट संपत्ति बनाये बिना कर सकता हूं? क्योंकि उपयोगकर्ता रनटाइम में इस रंग को बदलने में सक्षम होगा।

धन्यवाद!

उत्तर

9

उपयोग AppcompatCheckbox

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

, क्लिक करें सामान्य की तुलना में धीमी है, लेकिन हालांकि काम करता है! – Lera

+0

AppCompatCheckBox को विस्तारित करने का प्रयास करें, रंगीन कोड जोड़ें; फिर प्रदर्शन @Lera –

+0

देखें, मैं अब एंड्रॉइड के संपर्क में नहीं हूं, क्या आप में से कुछ यह पुष्टि कर सकते हैं कि क्या यह समस्या समस्या को हल करती है? –

10

कोड नीचे नीचे की जांच और checkbox.because checkbox.setSupportButtonTintList (colorStateList) की अचिह्नित व्यवहार को धीमा के बिना सुचारू रूप से काम करेगी; कुछ उपकरणों

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

प्रदर्शन के लिए AppCompatCheckbox से कक्षा का विस्तार भी कर सकते हैं, मैंने अभी उल्लेख किया है कि "अप्रत्याशित व्यवहार" का सामना करना पड़ा, और इस कोड ने दिन बचाया! साझा करने के लिए बहुत बहुत धन्यवाद! –

0

यह मेरे लिए काम करता पर अप्रत्याशित रूप से व्यवहार करेंगे:

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)); 
} 
इस समाधान के साथ
संबंधित मुद्दे