2014-10-23 5 views
16

पर टिनटिंग चेकबॉक्स, इसलिए, मैं AppCompat चेकबॉक्स पर टिंट लागू करना चाहता हूं।प्री v21

सब कुछ लॉलीपॉप पर ठीक काम करता है:

android:buttonTint="@color/purple_FF4081" 

या इस तरह से:

android:theme="@style/Theme.MyTheme.PurpleAccent" 

लेकिन इस में से किसी की स्थापना पैरामीटर पूर्व लॉलीपॉप पर कुछ भी नहीं बदलते। केवल तभी काम करता है जब मैं ऐप थीम के लिए colorAccent सेट करता हूं। लेकिन मैं नहीं चाहता कि सभी विजेट्स अपना रूप बदल दें, सिर्फ एक चेकबॉक्स। रंगीन drawables सेट किए बिना ऐसा करने का कोई तरीका है?

उत्तर

47

त्वरित FYI कि यह सब AppCompatActivity और नए समर्थन लाइब्रेरी की शुरुआत के बाद अब बदल गया है, for reference (outlined beautifully here) एक चेकबॉक्स theme atttribute का उपयोग करने और colorControlNormal और colorControlActivated की स्थापना द्वारा रंगा हुआ जा सकता है। एक्सएमएल

<style name="MyCheckBox" parent="Theme.AppCompat.Light"> 
<item name="colorControlNormal">@color/indigo</item> 
<item name="colorControlActivated">@color/pink</item> 
</style> 

लेआउट xml:

<CheckBox 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:checked="true" 
     android:text="Check Box" 
     android:theme="@style/MyCheckBox"/> 
+0

सही काम करता है, –

+0

के लिए यह काम नहीं कर रहा है ... – Pallavi

+0

यह सोना है! इस जवाब की तलाश में था। वैसे, क्या है चेकबॉक्स का डिफ़ॉल्ट रंग? यदि मैं सामान्य स्थिति को डिफ़ॉल्ट रंग रखना चाहता हूं, तो यह क्या होगा? मैंने "@null" की कोशिश की लेकिन यह काम नहीं किया। –

1

संपादित करें 6/28/16: नीचे दिया गया उत्तर अब सही नहीं है। Google द्वारा एपकोपेट लाइब्रेरी के साथ प्री-वी 21 डिवाइस पर टिनटिंग की अनुमति देने के नए तरीके पर स्वीकृत उत्तर देखें।


मूल उत्तर:

संक्षिप्त उत्तर है: कोई। प्री-वी 21 उपकरणों पर उपयोग के लिए कस्टम ड्रॉबल्स बनाने की आवश्यकता होगी। इसका कारण यह है विशेष रंग के बारे में पता विगेट्स वर्तमान में छिपे हुए हैं, क्योंकि वे इस समय एक अधूरा कार्यान्वयन विस्तार पर हों (Google कहा गया है कि इस, पूछे जाने वाले प्रश्न अनुभाग में भविष्य में बदल सकता according to their developer blog)

दो स्थितियों आप सकता है कर रहे हैं colorAccent कि काम कर सकते हैं ओवरराइड: एक LayoutInflater बिना

  • विजेट के अपने स्वयं के कस्टम संस्करण है (यानी आप EditText बढ़ाया है)
  • EditText बनाना (अर्थात नई EditText बुला())।

    शैलियों:

+2

मुझे लगता है कि गूगल में ** विजेट tinting का कहना है **: तुम बस हमेशा की तरह अपने लेआउट में इन नियंत्रण का उपयोग, कुछ भी इन काम करने के लिए विशेष करने की जरूरत नहीं है और AppCompat बाकी करेंगे। – bluebyte

+0

हां, एंड्रॉइड ऐप कॉम्पैक्ट के साथ रंग योजना को ओवरराइड करेगा यदि आप अपने ऐप style.xml में colorAccent को परिभाषित करते हैं। लेकिन जैसा कि मैंने कहा, वर्तमान में यह वर्तमान AppCompat के साथ एक या कुछ भी नहीं है। – opt05

+0

यह एक शर्म की बात है, उन्होंने थीम को किसी भी दृश्य पर सेट करने की क्षमता को जोड़ा है (इसलिए उदाहरण के लिए आप चेकबॉक्स के विषय को विपरीत रंग पर काम करने के लिए उलटा कर सकते हैं), लेकिन यह ऐप में काम नहीं कर रहा है compat पुस्तकालय। इसके अलावा आप बटन टिनिट सेट कर सकते हैं लेकिन यह केवल 21+ में भी काम करता है :( –

9

मैं, यह प्रोग्राम के रूप में करने के लिए की जरूरत के लिए एक छोटे से खुदाई करते समय मैं अंत में इस समाधान (Kitkat & Marshmallow पर परीक्षण) में पाया गया, मैं सिर्फ मामले में यह पोस्ट करेंगे यह मदद करता है किसी के बाद:

public static void setAppCompatCheckBoxColors(final AppCompatCheckBox _checkbox, final int _uncheckedColor, final int _checkedColor) { 
    int[][] states = new int[][]{new int[]{-android.R.attr.state_checked}, new int[]{android.R.attr.state_checked}}; 
    int[] colors = new int[]{_uncheckedColor, _checkedColor}; 
    _checkbox.setSupportButtonTintList(new ColorStateList(states, colors)); 
} 
+0

मेरे लिए काम नहीं किया। कोई फर्क नहीं पड़ता कि मैंने जो रंग प्रदान किया है, वह हमेशा चेक और अनचेक दोनों राज्यों के लिए भूरा है। मैंने फ़ंक्शन को निम्नानुसार कहा है: etAppCompatCheckBoxColors (चेकबॉक्स, R.color.simple_red, R.color.colorPrimary); 'जहां मैंने' AppCompatCheckBox चेकबॉक्स = नया AppCompatCheckBox (संदर्भ); 'का उपयोग करके चेकबॉक्स बनाया था। – Zvi

+2

आप कलर रेस आईडी का उपयोग कर रहे हैं, आपको रंग खुद को निर्दिष्ट करना चाहिए: 'setAppCompatCheckBoxColors (चेकबॉक्स, रंग। YELLOW, Color.RED);' या इस तरह आपके उदाहरण में: 'setAppCompatCheckBoxColors (चेकबॉक्स, गतिविधि .getResources()। getcolor (R.color.simple_red), activity.getResources()। getcolor (R.color.colorPrimary));' – androidseb

+0

इसे हल किया गया। Thx @androidseb – Zvi

20

आप रंग कर सकते हैं सीधे एक्सएमएल में।बॉक्स के लिए buttonTint उपयोग:

<CheckBox 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:buttonTint="@color/CHECK_COLOR" /> 

तुम भी पुराने एपीआई के लिए इस appCompatCheckbox v7 का उपयोग कर सकते (एपीआई स्तर 23 के रूप में):

<android.support.v7.widget.AppCompatCheckBox 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    app:buttonTint="@color/COLOR_HERE" /> 
+0

उत्तर के लिए बहुत बहुत धन्यवाद :) – sha

+0

यह काम नहीं करता है। मैंने इसे चेक किया है। + AppCompat * विजेट स्वचालित रूप से लागू होते हैं यदि वे गतिशील रूप से बनाए गए नहीं हैं। – Slava

2

मैं सभी जवाब की कोशिश की है, लेकिन के लिए केवल इस एक काम करता है मुझे पूरी गतिविधि (या अनुप्रयोग) के आधार शैली के लिए atttribute colorControlNormal और colorControlActivated जोड़ने के लिए अपने नियंत्रक से विषय को दूर

यहाँ

उदाहरण

है

आपका Mainfest

<application 
     android:allowBackup="true" 
     android:icon="@mipmap/ic_launcher" 
     android:label="@string/app_name" 
     android:supportsRtl="true" 
     android:theme="@style/AppTheme"> // here is the style used 
     <activity android:name=".MainActivity"> 
      <intent-filter> 
       <action android:name="android.intent.action.MAIN" /> 

       <category android:name="android.intent.category.LAUNCHER" /> 
      </intent-filter> 
     </activity> 
    </application> 
संबंधित मुद्दे