2011-01-28 19 views
8

मैं उन विषयों को ओवरराइड करने में सक्षम हूं जिनके नाम "एंड्रॉइड:" के साथ नाम हैं, लेकिन एंड्रॉइड थीम्स.एक्सएमएल उन गुणों को भी परिभाषित करता है जो ओवरराइड करने में सक्षम नहीं लगते हैं। उदाहरण के लिए:डिफ़ॉल्ट एंड्रॉइड थीम ओवरराइड करें

<!-- Variation on the Light theme that turns off the title --> 
<style name="Theme.Codebase" parent="android:style/Theme.Light"> 
    <item name="android:windowNoTitle">true</item> 
    <item name="android:windowContentOverlay">@null</item> 
    <item name="colorBackground">@color/off_white</item> 
</style> 

colorBackground Theme.Light एक्सएमएल में परिभाषित किया गया है, लेकिन यह यहाँ जोड़ने मुझे एक

/res/values/styles.xml:10: error: Error: No resource found that matches the given name: attr 'colorBackground'. 

त्रुटि देता है। मैं पूरी तरह से आवेदन के लिए उस शैली को कैसे ओवरराइड कर सकता हूं?

+0

एंड्रॉइड के बिना उन टैग: एंड्रॉइड स्रोत में उसी res/value फ़ोल्डर में attr xml फ़ाइलों के अंदर परिभाषित किया गया प्रतीत होता है। http://android.git.kernel.org/?p=platform/frameworks/base.git;a=tree;f=core/res/res/values;hb=HEAD attrs.xml और attrs_manifest.xml I पर देखें I आपको लगता है कि आपको या तो xmlns का उपयोग करके इन्हें आयात करने की आवश्यकता है, या अपने मूल्य फ़ोल्डर में समान फाइलें जोड़ें, लेकिन मुझे सुनिश्चित करने के लिए एक्सएमएल के बारे में पर्याप्त जानकारी नहीं है। – Jems

उत्तर

8

आप मानक अधिलेखित कर सकते हैं उसी तरह आप windowNoTitle के रूप में इस तरह के गुण संशोधित गुण, सिर्फ इस तरह android: उपसर्ग जोड़ने के लिए भूल नहीं है:

<?xml version="1.0" encoding="utf-8"?> 
<resources> 
    <style name="SEclubTheme" parent="@android:style/Theme"> 
     <item name="android:colorForeground">@color/bright_foreground_dark</item> 
     <item name="android:colorBackground">@color/background_dark</item> 
    </style> 
</resources> 
+0

हाँ, मैंने इसे समझ लिया। मैं अभी भी इस बात से परेशान हूं कि "रंगबैकग्राउंड" अपने विषयों में कैसे काम करता है। कोई उपाय? अभी के लिए सबसे अच्छा जवाब! – typeoneerror

+0

कि मैं कह सकता हूं। यह 'colorBackgroundCacheHint' पैरामीटर को परिभाषित करता है, जिसका उपयोग 'लिस्ट व्यू' शैलियों में किया जाता है ताकि अनुमान लगाया जा सके कि दृढ़ रंग पृष्ठभूमि पर विचार हमेशा खींचे जाते हैं। इसके अलावा इस विशेषता के लिए कोई उपयोग नहीं होता है। 'विंडोबैकग्राउंड' विशेषता जो अधिक महत्वपूर्ण है, जैसा कि नाम बताता है, विंडो पृष्ठभूमि को परिभाषित करता है। – Malcolm

3

attr उपसर्ग के बिना, आपके colorBackground एक विशेषता हो जाता है कि आप परिभाषित करने की जरूरत है। निम्न उदाहरण जहां theme_dependent_icon एक styles.xml में परिभाषित किया गया है पर विचार करें:

<resources xmlns:android="http://schemas.android.com/apk/res/android"> 
    <declare-styleable name="custom_menu"> 
      <attr name="theme_dependent_icon" format="reference"/> 
    </declare-styleable> 
    <style name="MyDarkTheme" parent="android:Theme" > 
     <item name="theme_dependent_icon">@drawable/ic_search_dark</item> 
    </style> 
    <style name="MyLightTheme" parent="android:Theme.Light" > 
     <item name="theme_dependent_icon">@drawable/ic_search_light</item> 
    </style> 
</resources> 

फिर, आप अपने main_activity.xml में ?attr/theme_dependent_icon के माध्यम से विशेषता का उपयोग कर सकते हैं:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:tools="http://schemas.android.com/tools" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:orientation="vertical" > 
    <ImageView 
     android:id="@+id/imageView1" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:src="?attr/theme_dependent_icon" /> 
</LinearLayout> 

इस उदाहरण में, क्योंकि मैं इस्तेमाल किया कस्टम थीम नाम MyDarkTheme और MyLightTheme, से पहले आपकी मुख्य गतिविधि के onCreate के दौरान उन्हें चुना जाना चाहिए, यानी

@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setTheme(R.style.MyDarkTheme); // causes ic_search_dark.png to be shown 
    // setTheme(R.style.MyLightTheme); // causes ic_search_light.png to be shown 
    setContentView(R.layout.main_activity); 
} 

कॉलिंग सेटथीम() रनटाइम के दौरान थीम चुनने का एक तरीका है। एक और तरीका है , values-11, values-14 डिफ़ॉल्ट थीम के अनुरूप, एंड्रॉइड 3.0 (एपीआई -11) के लिए थीम और एंड्रॉइड 4.0 (एपीआई -14) के लिए थीम के तहत styles.xml के कई संस्करणों को परिभाषित करना है।

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