यहाँ सुझाया गया उत्तर एंड्रॉइड 5.0 पर ठीक से काम नहीं करता है यदि आपकी XML आधारित रंग स्थिति सूची थीम आधारित विशेषताओं का उल्लेख करती है .. उदाहरण के लिए, मेरे पास एक xml रंग राज्य सूची है जैसे:
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:color="?colorPrimary" android:state_enabled="true"/>
<item android:alpha="0.12" android:color="?attr/colorOnSurface"/>
</selector>
Xml से मेरे बैकग्राउंड के रूप में इसका उपयोग करना एंड्रॉइड 5.0 और बाकी सभी चीजों पर ठीक काम करता है। हालाँकि अगर मैं इसे इस तरह कोड में सेट करने की कोशिश करता हूँ:
(यह मत करो)
myButton.setSupportButtonTintList(ContextCompat.getColorStateList(myButton.getContext(), R.color.btn_tint_primary));
यह वास्तव में मायने नहीं रखता अगर मैं गतिविधि या बटन के संदर्भ को ContextCompat.getColorStateList () विधि से पास करता हूं, न तो मुझे बटन के भीतर विषय के संबंध में उचित रंग राज्य सूची देगा। ऐसा इसलिए है क्योंकि रंग राज्य सूचियों में थीम विशेषताओं का उपयोग करने में 23 तक का समर्थन नहीं किया गया था और इन्हें हल करने के लिए ContextCompat कुछ विशेष नहीं करता है। इसके बजाय आपको AppCompatResources.getColorStateList () का उपयोग करना चाहिए जो उपकरणों पर अपने स्वयं के संसाधन पार्सिंग / थीम विशेषता रिज़ॉल्यूशन <API 23 करता है।
इसके बजाय, आपको इसका उपयोग करना चाहिए:
myButton.setSupportBackgroundTintList(AppCompatResources.getColorStateList(myButton.getContext(), R.color.btn_tint_primary));
TLDR: उपयोग AppCompatResources और -ContextCompat- आप एंड्रॉयड के सभी API संस्करण भर में हल हो गई थीम वाले संसाधनों की आवश्यकता होगी नहीं तो।
विषय पर अधिक जानकारी के लिए, इस लेख को देखें ।