2012-06-12 15 views
33

मैं एक साधारण चीज़ करना चाहता हूं: एक ड्रॉइंग को परिभाषित करें जिसमें सिस्टम स्टेटस दबाए गए पृष्ठभूमि रंग के समान ही पृष्ठभूमि रंग है। मैं इसे में इस तरह कर res/ड्रॉएबल/my_drawable.xml:आकर्षित करने में रंग विशेषता का संदर्भ कैसे लें?

<?xml version="1.0" encoding="utf-8"?> 
    <selector xmlns:android="http://schemas.android.com/apk/res/android" > 
    <item android:state_selected="true"> 
     <color android:color="?android:attr/colorPressedHighlight"/> 
    </item> 
    <item android:state_selected="false"> 
     <color android:color="@color/section_list_background"/> 
    </item>  
    </selector> 

मैं हमेशा मिलती है:

java.lang.UnsupportedOperationException: Cant convert to color: type=0x2 

कोई सुराग?

सादर

उत्तर

43

आप अपनी समस्या के समाधान के लिए निम्न क्या करने की जरूरत हो सकती है:)

1 अपने रंग में प्रत्येक विषय के लिए 2 रंग को परिभाषित करें दायर:

<?xml version="1.0" encoding="utf-8"?> 
<resources> 
    <color name="my_color_dark">#ff33B5E5</color> 
    <color name="my_color_light">#ff355689</color> 
</resources> 

2) फ़ाइल बनाएँ सामग्री के साथ res/values ​​/ attrs.xml:

<?xml version="1.0" encoding="utf-8"?> 
<resources> 
    <attr name="my_color" format="reference" /> 
</resources> 

3) मान लें कि आपके पास 2 वां है अपने styles.xml (Theme.dark और Theme.light) में उभरती हुई अर्थव्यवस्थाओं को परिभाषित:

<style name="Theme.dark" parent="@style/Theme.Sherlock"> 
    <item name="my_color">@color/my_color_dark</item> 
</style> 

<style name="Theme.light" parent="@style/Theme.Sherlock.Light"> 
    <item name="my_color">@color/my_color_light</item> 
</style> 

4) एक drawable में रंग का उपयोग करें:

<color android:color="?attr/my_color"/> 

आशा इससे आपकी समस्या ठीक करना चाहिए।

+7

किसी कारण से मुझे इस दृष्टिकोण के साथ एक त्रुटि मिलती है:' android.view.InflateException: बाइनरी एक्सएमएल फ़ाइल लाइन # 2: कक्षा को बढ़ाने में त्रुटि ' – Muxa

+2

यदि मैं इस दृष्टिकोण को आजमाता हूं तो मुझे वही त्रुटि मिल रही है। यह एंड्रॉइड के लिए काम करता है: लेआउट एक्सएमएल में रंग लेकिन ड्रॉइंग एक्सएमएल नहीं है। एक कठिन कामकाज: अंतिम टाइपेड वैल्यू टाइप किया गया वैल्यू = नया टाइपेड वैल्यू(); getTheme()। ResolAttribute (R.attr.tx_frq, typedValue, true); COLOR = typedValue.data; Drawable डी = getResources()। GetDrawable (R.drawable.mydrawable); d.setColorFilter (रंग, पोर्टरडफ.मोड.मल्टीप्ली); – Larphoid

+2

यह समाधान केवल API 11+ पर काम करता है। एपीआई 10 और निचले के लिए, आप एक Drawable xml फ़ाइल के अंदर एक विशेषता का संदर्भ नहीं दे सकते। – BladeCoder

7

बस /res/values/color.xml में एक नया color.xml फ़ाइल बनाने और उस में निम्नलिखित की तरह कोड डाल:

<?xml version="1.0" encoding="utf-8"?> 
<resources> 

    <color name="editcolor">#ff99ffff</color> 
    <color name="transparent">#00000000 </color> 

</resources> 
+1

में डायनामिक कनेक्शन के लिए उपयोग किए जाने वाले Attr संसाधन, अगर मैं थीम बदलना चाहता हूं, तो कोई भी बेकार है, या कोई फोन पर अलग-अलग थीम चुन लेगा, मैं अभी भी निश्चित मानों के साथ रहूंगा। – Michal

3

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

आपको अपने एक्सएमएल में रंग संसाधन का संदर्भ देने की आवश्यकता है।

<?xml version="1.0" encoding="utf-8"?> 
<resources> 
    <color name="colorPressedHighlight">#FF8800</color> 
</resources> 

तो इस तरह इसे संदर्भ:

<?xml version="1.0" encoding="utf-8"?> 
<selector xmlns:android="http://schemas.android.com/apk/res/android" > 
    <item android:state_selected="true"> 
     <color android:color="@color/colorPressedHighlight"/> 
    </item> 
    <item android:state_selected="false"> 
     <color android:color="@color/section_list_background"/> 
    </item>  
</selector> 

या आप एक रंग उपलब्ध संदर्भित कर सकते हैं एंड्रॉयड संसाधनों में:

<?xml version="1.0" encoding="utf-8"?> 
<selector xmlns:android="http://schemas.android.com/apk/res/android" > 
    <item android:state_selected="true"> 
     <color android:color="@android:color/holo_orange_light"/> 
    </item> 
    <item android:state_selected="false"> 
     <color android:color="@android:color/holo_blue_dark"/> 
    </item> 
</selector> 
+0

ठीक है मुझे तुम्हारा बिंदु मिला। शायद मैं गलत विचार का उपयोग कर रहा हूँ। मैं आपको बताता हूं कि मैं क्या हासिल करना चाहता हूं।मेरे पास कुछ कस्टम दृश्य है और मैं इसे चयनित-स्टेटस पृष्ठभूमि रंग को वास्तविक थीम दबाए गए-राज्य रंग के समान ही सेट करना चाहता हूं। सोचो कि मैं इसे '@android: color/...' का उपयोग करके प्राप्त नहीं करूंगा। – Michal

+0

क्या आप आधिकारिक एंड्रॉइड थीम्स का उपयोग कर रहे हैं? तो आप रंग से लिंक कर सकते हैं, या केवल $ ANDROID_SDK $/प्लेटफ़ॉर्म/एंड्रॉइड -14/डेटा/res में एसडीके से ड्रॉबल्स प्राप्त कर सकते हैं। – XGouchet

+0

हां मैं सहमत हूं, लेकिन जब मैं अपने ऐप में बदलती थीम को अनुमति देना चाहता हूं तो मुझे अपने आप पर कस्टम ड्रॉइंग के रंग परिवर्तन को संभालना होगा। मैंने सोचा कि मैं इसे किसी भी तरह से स्वचालित रूप से कर सकता हूं - एटीआर वैल्यू के साथ अपने पृष्ठभूमि रंग को चिपका रहा हूं। – Michal

0

कोशिश आप अपनी खुद की संसाधन बनाने के द्वारा ऐसा कर सकते हैं इस तरह एंड्रॉइड में रंग डालें: नीचे

<?xml version="1.0" encoding="utf-8"?> 
<selector xmlns:android="http://schemas.android.com/apk/res/android"> 
    <item android:state_pressed="true" android:drawable="?android:attr/colorPressedHighlight"/> <!-- pressed --> 
    <item android:state_focused="true" android:drawable="@color/blue"/> <!-- focused --> 
    <item android:drawable="@color/section_list_background"/> <!-- default --> 
</selector> 

या

<selector xmlns:android="http://schemas.android.com/apk/res/android"> 
    <item android:state_focused="true" android:color="?android:attr/colorPressedHighlight"/> 
    <item android:state_enabled="false" android:color="@color/section_list_background" /> 
    <item android:color="@color/testcolor5"/> 
</selector> 
+0

http://developer.android.com/guide/topics/resources/drawable-resource.html –

+0

क्या आपने यह जांच लिया? उपयोग करने का प्रयास करते समय मुझे त्रुटियां हैं: '' – Michal

+0

मैं बस यह कहना चाहता हूं कि यह आपके राज्य का उपयोग करें यदि आप "आइटम एंड्रॉइड" चाहते हैं: state_selected "लेकिन एंड्रॉइड का उपयोग करें: रंग सेट करने के लिए विशेषता के रूप में खींचने योग्य ...... –

4

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

संबंधित मुद्दे