दिलचस्प पोस्ट
ExtJs – स्तंभ शीर्षलेख में खोज फ़ील्ड के साथ ग्रिड को फ़िल्टर करें MYSQL दो कॉलम में अंतर मान चुनें जावास्क्रिप्ट: क्या सभी त्रुटियों पर क्रोम को तोड़ने का एक तरीका है? किटकैट 4.4.2 संस्करण के साथ एसडीकार्ड पर "EACCES अनुमति अस्वीकृत" से बचने के लिए। Google से नई नीति एंड्रॉइड स्टूडियो में कस्टम फ़ॉन्ट का उपयोग कैसे करें क्या ब्राउज़र में पृष्ठ पर सभी ईवेंट को प्रोग्रामेटिक रूप से पकड़ना संभव है? क्या हमें सूची दृश्य को बदलने के लिए रीसाइक्लाइजर का उपयोग करना चाहिए? सी में संतृप्त अतिरिक्त कैसे करें? डुप्लिकेट आइडेंटिफ़ार्स के साथ डेटा.फ्रेम / टिब्बल के साथ फैलाएं कैसे RecyclerView में आइटम के बीच डिवाइडर और रिक्त स्थान जोड़ने के लिए? कैसे बड़ी (1 जीबी) टीसीटीटी फ़ाइल को .net में पढ़ा जा सकता है? पूछे जाने वाले प्रश्न: गतिशील_कास्ट केवल तब ही काम करता है जब एक कक्षा में कम से कम 1 आभासी पद्धति होती है? शेल स्क्रिप्ट: स्क्रिप्ट से ssh पर फ़ंक्शन चलाएं एकाधिक रिकॉर्ड में स्ट्रिंग को बदलने के लिए मैं अपने एसक्यूएल को कैसे बदल सकता हूँ? जावा कोड में एक सिंगलटन पैटर्न को लागू करना (कभी-कभी) जावा की दुनिया में एक विरोधी-पैटर्न माना जाता है?

कैसे एक drawable से शैली विशेषताओं को संदर्भित?

मुझे अपने आवेदन के लिए 2 चुनिंदा थीम हैं। ऐसा करने के लिए, मैंने कुछ विशेषताओं को परिभाषित किया, जैसे:

<attr format="color" name="item_background" /> 

फिर, मैंने दोनों विषयों को इस तरह बनाया:

  <style name="ThemeA"> <item name="item_background">#123456</item> </style> <style name="ThemeB"> <item name="item_background">#ABCDEF</item> </style> 

यह विधि महान काम करती है, मुझे आसानी से कई विषयों को बनाने और संशोधित करने की इजाजत देता है। समस्या यह है कि ऐसा लगता है कि इसका उपयोग केवल दृश्यों में किया जा सकता है, और डैशटेबल में नहीं

उदाहरण के लिए, लेआउट के अंदर एक दृश्य से एक मान को संदर्भित करता है:

  <TextView android:background="?item_background" /> 

लेकिन Drawable में ऐसा करने से ऐसा नहीं होता है:

  <shape android:shape="rectangle"> <solid android:color="?item_background" /> </shape> 

एप्लिकेशन को चलाने पर मुझे यह त्रुटि मिलती है:

  java.lang.UnsupportedOperationException: Can't convert to color: type=0x2 

यदि ?item_background मैं एक हार्डकोड रंग का उपयोग करता हूं, यह काम करता है, लेकिन यह मेरे थीम का उपयोग करने की अनुमति नहीं देता है मैंने भी कोशिश की ?attr:item_background , लेकिन ऐसा ही होता है

मैं ये कैसे करूं? और यह दृश्य में काम करता है लेकिन ड्यूरेबल्स में क्यों नहीं? मुझे दस्तावेज़ में कहीं भी यह सीमा नहीं मिल सकती …

Solutions Collecting From Web of "कैसे एक drawable से शैली विशेषताओं को संदर्भित?"

मेरे अनुभव में यह एक एक्सएमएल ड्रॉएबल में एक विशेषता को संदर्भित करना संभव नहीं है I
अपने विषय को बनाने के लिए आपको इसकी आवश्यकता है:

  • प्रति थीम डालें एक एक्सएमएल बनाएँ
  • आप @color टैग या #RGB प्रारूप के साथ सीधे @color में आवश्यक रंग शामिल करें।

Attr.xml में अपने डरावने योग्य के लिए एक विशेषता बनाएं

 <?xml version="1.0" encoding="utf-8"?> <resources> <!-- Attributes must be lowercase as we want to use them for drawables --> <attr name="my_drawable" format="reference" /> </resources> 

अपनी थीम को अपने draw.xml में जोड़ें

 <style name="MyTheme" parent="@android:style/Theme.NoTitleBar"> <item name="my_drawable">@drawable/my_drawable</item> </style> 

अपने विशेषता का उपयोग करके अपने लेआउट में अपने चित्रों को संदर्भित करें।

 <TextView android:background="?my_drawable" /> 

lollipop (एपीआई 21) के साथ शुरू करना यह सुविधा समर्थित है, https://code.google.com/p/android/issues/detail?id=26251 देखें

हालांकि, यदि आप लॉलीपॉप के बिना डिवाइस को लक्षित कर रहे हैं, तो इसका उपयोग न करें, क्योंकि यह क्रैश हो जाएगा, इसके बजाय स्वीकृत उत्तर में समाधान का उपयोग करें।

यद्यपि पूर्व-लॉलीपॉप उपकरणों पर ड्रॉबल से संदर्भ शैली विशेषताओं को संभव नहीं है, लेकिन यह रंग राज्य सूचियों के लिए संभव है। आप एंड्रॉइड सपोर्ट लाइब्रेरी से AppCompatResources.getColorStateList (संदर्भ संदर्भ, इंट रिआर्ड) विधि का उपयोग कर सकते हैं। नकारात्मक पक्ष यह है कि आपको उन रंग राज्य सूचियों को प्रोग्रामेटिक रूप से सेट करना होगा

यहां एक बहुत ही बुनियादी उदाहरण है।

रंग / my_color_state.xml

 <selector xmlns:android="http://schemas.android.com/apk/res/android"> <item android:state_checked="true" android:color="?colorControlActivated" /> <item android:color="?colorControlNormal" /> </selector> 

एक विजेट जिसमें एक रंग राज्य सूची की आवश्यकता होती है:

 <RadioButton android:id="@+id/radio_button" android:text="My Radio" /> 

और सबसे महत्वपूर्ण:

 ColorStateList csl = AppCompatResources.getColorStateList(context, R.color.my_color_state); RadioButton r = (RadioButton) findViewById(R.id.radio_button); r.setTextColor(csl); 

खैर, सबसे खूबसूरत या सबसे छोटा रास्ता नहीं है, लेकिन एंड्रॉइड के पुराने संस्करण (प्री-लॉलीपॉप) पर काम करने के लिए एंड्रॉइड सपोर्ट लाइब्रेरी यही है।

दुर्भाग्य से, चित्रण के लिए समान विधि शैली विशेषताओं के साथ काम नहीं करती।

जैसा कि @रर्मोर ने कहा है कि यह अब एपीआई 21 पर समर्थित है। लेकिन उन लोगों के लिए जिन्हें एंड्रॉइड के विरासत संस्करणों का समर्थन करने की जरूरत है, आप इस सुविधा का उपयोग कर सकते हैं। V7 समर्थन लाइब्रेरी का उपयोग करके आप इसे अभी भी न्यूनतम एसडीके स्तर के साथ क्षुधा पर 7 से नीचे तक का उपयोग कर सकते हैं।

V7 एंड्रॉइड सपोर्ट लाइब्रेरी में AppCompatImageView इस सुविधा के एक बग मुक्त कार्यान्वयन है। बस ImageView साथ ImageView अपने उपयोग की जगह।