2010-12-10 9 views
16

यहाँ मेरी कहानी है:मैं style.xml से एट्रिब्यूटसेट कैसे बना सकता हूं?

मुझे लगता है कि मैं एक पूर्वनिर्धारित शैली का उपयोग कोड से बनाना चाहते हैं एक कस्टम ViewGroup मिला, मेरे दृष्टिकोण अब तक एक style.xml तत्व से एक AttributeSet वस्तु पैदा कर रहा है, इसलिए की तरह (चेतावनी, सावधान रहना कॉपी-पेस्ट कोड आगे) का:

XmlPullParser parser = getResources().getXml(R.style.my_stylez); 
    AttributeSet attributes = Xml.asAttributeSet(parser); 

लेकिन जब ऐसा करने से मैं कुछ पागल त्रुटि मिलती है: "..android.content.res.Resources $ NotFoundException: संसाधन आईडी # 0x7f090002 प्रकार # 0x12 मान्य नहीं है "

मुझे पता है कि शायद मुझे कुछ बहुत स्पष्ट याद आ रही है (या मैं हूँ मैं?), और अगर आप में से कोई भी मुझे सही दिशा में इंगित कर सकता है तो आभारी होंगे।

धन्यवाद

+0

क्या आपने इसे सब के बाद काम किया? –

+0

3.5 साल बाद कोई समाधान? – Supuhstar

उत्तर

0

अपने एक्सएमएल (R.style.my_stylez) ऐसा लगता है कि मौजूद नहीं है, या अपने आर फ़ाइल पुरानी हो चुकी है।

0

जब भी आप रेस निर्देशिका में नए जोड़ करते हैं तो परियोजना को साफ और निर्माण करना एक अच्छा विचार है। लेकिन एडीटी 15 के बाद से यह हमेशा अच्छा काम नहीं करता है। आपको कभी-कभी एक कदम आगे जाना पड़ता है और बिन निर्देशिका के साथ-साथ सामान्य निर्देशिका भी हटा दी जाती है।

एडीटी दो निर्देशिकाओं को दोबारा शुरू करने के बाद, फिर से साफ करने का प्रयास करें।

0

यह देखकर बहुत स्पष्ट लगता है कि यह संभव नहीं है। माफ़ कीजिये। मैं सचमुच चाहता हूं कि यह संभव था ...

0

getXml विधि res/xml से नहीं पढ़ेगी, न कि res/values ​​से, मुझे लगता है कि विचार यह है कि आप डेटा प्राप्त करने के लिए अन्य तरीकों में से एक का उपयोग करते हैं, जैसे कि

TypedArray a = context.obtainStyledAttributes(attrs, R.styleable.MyCustomTheme); 

और फिर TypedArray से बाहर मान हड़पने:

thingColor = a.getColor(R.styleale.myCustomColor, res.getColor(R.color.myDefaultColor)); 

यह styleables लिए काम करता है, फिर भी मेरी समस्या पहली जगह में एक्सएमएल से AttributeSet attrs हो रही है ओवरराइड के रूप में उपयोग करने के लिए है, और लोगों की इजाजत दी यह निर्धारित करने के लिए कि वे कौन सी एक्सएमएल फ़ाइल रन टाइम पर चाहते हैं, इसे int बढ़ाएं ओ एट्रिब्यूटसेट और इसे पास करें।

मैं जब मैं दूसरे भाग के लिए एक जवाब है वापस पोस्ट करेंगे, लेकिन कोड नमूने का समाधान करना चाहिए

+0

आप Xml.asAttributeSet (context.getResources()। GetXml (R.xml.my_xml_file)) के लिए देख रहे हैं। उदाहरण के लिए एओएसपी में कुछ ड्रॉइंग सीटीएस परीक्षणों की जांच करें। – alanv

5

आप एक XML फ़ाइल के लिए एक संसाधन पहचानकर्ता के साथ शुरू करने के लिए की जरूरत है, अधिमानतः रेस/xml में। तो फिर तुम पहले एक XmlPullParser बनाकर कोई AttributeSet प्राप्त कर सकते हैं:

Resources res = context.getResources(); 
XmlPullParser parser = res.getXml(R.xml.some_xml_file); 

// Seek to the first tag. 
int type = 0; 
while (type != XmlPullParser.END_DOCUMENT && type != XmlPullParser.START_TAG) { 
    type = parser.next(); 
} 

// Wrap as an attribute set. 
AttributeSet attrs = Xml.asAttributeSet(parser); 

आप AOSP में drawable सीटीएस परीक्षणों में इस के उदाहरण मिल सकते हैं।

+0

उत्तर देने के लिए धन्यवाद! यह देखना अच्छा लगता है कि एक बार असंभव समाधान दिया गया था। : 3 – Supuhstar

+0

xml फ़ाइल को ठीक से सेटअप करने के अतिरिक्त: https://stackoverflow.com/questions/12508260/how-to-properly-write-xml-for-attributeset – Tobliug

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