Theme.AppCompat का उपयोग संपूर्ण ऐप के लिए वैश्विक थीम सेट करने के लिए किया जाता है। ThemeOverlay.AppCompat उस दृश्य, विशेष रूप से टूलबार के लिए उस विषय को ओवरराइड (या "ओवरले") करने के लिए उपयोग किया जाता है।
आइए एक उदाहरण देखें कि यह क्यों आवश्यक है।
एक ActionBar के साथ अनुप्रयोग विषयों
ActionBar को आम तौर पर एक ऐप में दिखाया जाता है। मैं colorPrimary
मान सेट करके यह रंग चुन सकता हूं । हालाँकि, विषय बदलने से ActionBar पर पाठ का रंग बदल जाता है।
<style name="AppTheme" parent="Theme.AppCompat">
<item name="colorPrimary">@color/colorPrimary</item>
<item name="colorPrimaryDark">@color/colorPrimaryDark</item>
<item name="colorAccent">@color/colorAccent</item>
</style>
चूंकि मेरा प्राथमिक रंग गहरा नीला है, इसलिए मुझे संभवतः उन विषयों में से एक का उपयोग करना चाहिए जो कार्रवाई पट्टी में हल्के पाठ रंग का उपयोग करता है क्योंकि काले पाठ को पढ़ना मुश्किल है।
ActionBar को छुपाना और टूलबार का उपयोग करना
Theme.AppCompat के बजाय Theme.AppCompat का उपयोग करने का संपूर्ण बिंदु यह है कि हम Android के पुराने संस्करणों को अपनी सामग्री डिज़ाइन थीम का उपयोग करने की अनुमति दे सकें। समस्या यह है कि Android के पुराने संस्करण ActionBar का समर्थन नहीं करते हैं। इस प्रकार, प्रलेखन एक्शनबार को छिपाने और अपने लेआउट में टूलबार जोड़ने की सिफारिश करता है। ActionBar को छिपाने के लिए हमें किसी एक NoActionBar
थीम का उपयोग करना होगा । निम्नलिखित चित्र एक्शनबेर के साथ टूलबार को छिपाकर दिखाते हैं।
लेकिन क्या होगा अगर मैं एक DarkActionBar के साथ एक लाइट थीम जैसा कुछ चाहता हूं? चूंकि मुझे NoActionBar का उपयोग करना है, इसलिए यह कोई विकल्प नहीं है।
ऐप थीम को ओवरराइड करना
यहाँ वह जगह है जहाँ ThemeOverlay आता है। मैं अपने टूलबार xml लेआउट में Dark ActionBar विषय निर्दिष्ट कर सकता हूँ।
<android.support.v7.widget.Toolbar
...
android:background="?attr/colorPrimary"
android:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar" />
यह आखिरकार हमें वह प्रभाव देने की अनुमति देता है जो हम चाहते हैं। Dark.ActionBar विषय इस विशेष अवसर के लिए लाइट ऐप थीम को ओवरले करता है।
- ऐप थीम:
Theme.AppCompat.Light.NoActionBar
- टूलबार थीम:
ThemeOverlay.AppCompat.Dark.ActionBar
यदि आप चाहते थे कि पॉपअप मेनू हल्का हो तो आप इसे जोड़ सकते हैं:
app:popupTheme="@style/ThemeOverlay.AppCompat.Light"
आगे के अध्ययन
मैंने इसे प्रयोग के माध्यम से और निम्नलिखित लेखों को पढ़ने के माध्यम से सीखा।