मैं कोड में अपनी थीम से प्राप्त शैली गुणों को सेट करने के लिए खुद को कोशिश कर रहा हूं।
मेरा कारण यह है कि मैं अपनी थीम से एक शैली का उपयोग करना चाहता हूं, लेकिन मेरा यूजर इंटरफेस लेआउट एक्सएमएल में किसी भी विजेट को परिभाषित किए बिना कोड (कस्टम लेआउट बिल्डर का उपयोग करके) में पूरी तरह से उत्पन्न होता है। तो मैं अपने विजेट के एक्सएमएल लेआउट में एक शैली सेट नहीं कर सकता - कोई एक्सएमएल लेआउट नहीं है।
मैं सोच रहा हूँ कि मैं इसे (मेरे लिए) लगता है कि
AttributeSet set = null;
क्योंकि यह है
TypedArray a = context.obtainStyledAttributes(AttributeSet set, int[] attrs, int defStyleAttr, int defStyleRes)
यहाँ का उपयोग करके अपनी विजेट के कोड में इस शैली स्थापित करने के लिए सक्षम हो जाएगा एक्सएमएल inflater क्या प्रदान किया होगा।
int[] attrs = R.styleable.MyWidget;
परिभाषित करता है कि मैं कौन से विशेषताओं को देखना चाहता हूं।
int defStyleAttr = myWidgetStyle;
जो मेरी थीम में परिभाषित एक संदर्भ है, MyWidget की शैली में। ये दोनों एक्सएमएल फाइलों में res/values में परिभाषित हैं। "myWidgetStyle" एंड्रॉइड डेवलपर्स के नाम के पैटर्न का पालन करता है जो उनके कोड में उपयोग किया जाता है।
defStyleRes = 0;
मुझे उम्मीद है कि मुझे इसके बारे में सोचने की आवश्यकता नहीं है।
तो इस तरह के एक पृष्ठभूमि रंग के रूप में, किसी भी संपत्ति प्राप्त करने के लिए,
Color color = a.getColor(R.styleable.MyWidget_background, R.color.my_default);
a.recycle();
यह वैसे भी, ताकि अब तक काम करने के लिए प्रतीत होता है।
ऐसा लगता है कि एंड्रॉइड बिल्ड सिस्टम आसानी से एक .getColor में उपयोग करने के लिए सही इंडेक्स उत्पन्न करता है, और इसे R.styleable.MyWidget_background
नाम देता है। मैंने यह नाम नहीं बनाया है, इसलिए एंड्रॉइड ने अपने स्टाइल करने योग्य MyWidget के लिए अपने एक्सएमएल का उपयोग करके इसे किया होगा।
मुझे उम्मीद है कि कोई आवश्यक विशेषता के लिए टाइपेडएरे को खोजकर सही इंडेक्स देख सकता है, लेकिन यह अक्षम होगा और टाइपेडएरे से निपटने के लिए एक अप्रिय कॉन्ट्रैक्शन की तरह दिखता है। मैं इसे रोकने के लिए एक बहुत लंबी छड़ी का उपयोग करेंगे!
डॉन