दिलचस्प पोस्ट
जावा-आधारित एप्लिकेशन के उपयोग के लिए लाइव वीडियो डिवाइस से छवियों को कैद करने का सबसे अच्छा तरीका क्या है? जावास्क्रिप्ट में "अपरिभाषित x 1" क्या है? कैसे हल करने के लिए "तर्क 1 my_function () को पारित स्ट्रिंग का एक उदाहरण होना चाहिए, स्ट्रिंग दिया" पहले PHP 7? MySQL में एकाधिक अपडेट स्प्रिंग एमवीसी 404 के साथ क्यों प्रतिक्रिया करता है और रिपोर्ट "डिस्पैचर सर्कल में यूआरआई के अनुरोध के लिए कोई मानचित्रण नहीं मिला ?" पूर्णांक के साथ == तुलना क्यों करते हैं। स्ट्रिंग (स्ट्रिंग) 127 और 128 के लिए अलग-अलग परिणाम देते हैं? सेलेनियम वेबड्राइवर को ठीक कैसे करें एक्सपैशन: ब्राउज़र कनेक्ट होने से पहले ही प्रतीत होता है? क्या है यदि __name__ == "__main__": क्या करें? 'printf' बनाम 'cout' में सी ++ बाइनरी शाब्दिक? AlertDialog के लिए थीम को कैसे बदलना है एक वर्ग में सदस्य फ़ंक्शंस के साथ जेनेरिक स्टडी :: फ़ंक्शन ऑब्जेक्ट का उपयोग करना युनिकोड स्ट्रिंग को स्ट्रिंग में पायथन में कनवर्ट करें (अतिरिक्त प्रतीकों वाले) क्यों JVM अभी भी पूंछ कॉल अनुकूलन का समर्थन नहीं करता है? एंड्रॉइड: GLES20: अपरिवर्तित ओपनजीएल ES एपीआई बुलाया गया

कैसे एक 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 , लेकिन ऐसा ही होता है

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

वेब के समाधान से एकत्रित समाधान "कैसे एक 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 अपने उपयोग की जगह।