2011-12-25 13 views
18

मुझे पूरा यकीन है कि इस प्रश्न का पहले से ही उत्तर दिया गया है। यह बहुत आम लगता है। लेकिन मुझे जवाब नहीं मिल रहा है। मैं समाधान भी नहीं समझ सकता।चयनित विगेट्स के थीम आश्रित रंग

मैं अपने TableRow में से एक चाहते हैं अलग अलग पृष्ठभूमि रंग के लिए:

यहाँ समस्या है। यह आसान है, मुझे बस

android:background="#123456" 

तालिकारो के एक्सएमएल घोषणा में जोड़ने की आवश्यकता है। लेकिन, मैं यह भी चाहता हूं कि मेरे आवेदन में दो थीम हों। अन्य विषय में, TableRow में अलग-अलग पृष्ठभूमि रंग होना चाहिए। मुझे थीम के अंदर रंग मान को परिभाषित करने और इसका उपयोग करने का कोई तरीका नहीं मिल रहा है। मैं कुछ इस तरह टाइप करने के लिए करना चाहते हैं:

<style name="Theme.MyApp" parent="@style/Theme.Light"> 
    <color "my_cool_color">#123456</color> 
</style> 

<style name="Theme.MyApp.Dark" parent="@style/Theme.Dark"> 
    <color "my_cool_color">#654321</color> 
</style> 

और, TableRow की घोषणा में:

android:background="@color/my_cool_color" 

तो, जब मैं इस विषय को बदलें, कि एक TableRow की पृष्ठभूमि का रंग भी बदल जाता है। मैंने कई घंटों तक कई तरीकों से कोशिश की है और सफल नहीं हुआ ... एक बात मैंने कोशिश नहीं की थी, टेबलरो पर अपना खुद का विजेट बना रहा था और इसके लिए एक अलग शैली घोषित कर रहा था - मुझे लगता है कि यह काम करना चाहिए, लेकिन यह है इतनी सरल समस्या के लिए बहुत भारी समाधान।

उत्तर

51

आप इसे विशेषताओं का उपयोग करके कर सकते हैं। अपने styles.xml में,

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

तो प्रत्येक विषय के लिए myCoolColor को परिभाषित:, अब

<style name="Theme.MyApp" parent="@style/Theme.Light"> 
    <item name="myCoolColor">#123456</item> 
</style> 

<style name="Theme.MyApp.Dark" parent="@style/Theme.Dark"> 
    <item name="myCoolColor">#654321</item> 
</style> 

पृष्ठभूमि के रूप में myCoolColor निर्दिष्ट पहले अपनी विशेषता attrs.xml में परिभाषित करते हैं (इस फ़ाइल को 'मूल्यों' फ़ोल्डर के अंतर्गत चला जाता है) आपके विचार:

android:background="?myCoolColor" 

आप आगे जा सकते हैं और रंग के संदर्भ का उपयोग कर सकते हैं ताकि आप अपने रंगों को परिभाषित कर सकें। एन एक जगह। विशेषता बदले एक संदर्भ शामिल करने के लिए (ध्यान दें कि हम एक रंग या एक संदर्भ का उपयोग कर सकते हैं):

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

अपने styles.xml बदले प्रत्येक विषय के लिए एक रंग संदर्भ के लिए:

<style name="Theme.MyApp" parent="@style/Theme.Light"> 
    <item name="myCoolColor">@color/blue</item> 
</style> 

<style name="Theme.MyApp.Dark" parent="@style/Theme.Dark"> 
    <item name="myCoolColor">@color/green</item> 
</style> 

अंत में रंग को परिभाषित आपका colors.xml:

<?xml version="1.0" encoding="utf-8"?> 
<resources> 
    <color name="blue">#0000FF</color> 
    <color name="green">#00FF00</color> 
</resources> 

यही है!

+0

धन्यवाद! मुझे attr.xml के बारे में कुछ मिला, लेकिन एक उपयुक्त उदाहरण नहीं मिला। इसके विपरीत, आपका जवाब और अधिक पूरा नहीं हो सका! – user1234567

+0

मुझे आपका उत्तर बहुत उपयोगी मिला, और मेरी समस्या भी हल हो गई। +1। लेकिन मुझे अभी भी एक समस्या है, मैं कोड में परिभाषित रंगों का उपयोग करना चाहता हूं। मैं यह कैसे कर सकता हूं, कोड में attrs से रंगों का उपयोग कैसे करें (xml नहीं)? – Sandra

+0

हां, लेकिन अगर मैं अंधेरे विषय का उपयोग करता हूं तो मैं रंग को नीला होना चाहता हूं, और अन्य हरे रंग के लिए। लेकिन मैं कोड में सही रंग कैसे प्राप्त कर सकता हूं? – Sandra

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