गहरे रंग वाली थीम, Android 10 (एपीआई लेवल 29) और इसके बाद के वर्शन पर उपलब्ध है. इसके ये फ़ायदे हैं:
- डिवाइस की स्क्रीन टेक्नोलॉजी के आधार पर, बैटरी के इस्तेमाल को काफ़ी कम करता है.
- इससे कम दृष्टि वाले और तेज़ रोशनी के प्रति संवेदनशील लोगों को स्क्रीन पर मौजूद कॉन्टेंट को देखने में आसानी होती है.
- इससे कम रोशनी वाली जगह पर डिवाइस का इस्तेमाल करना आसान हो जाता है.
गहरे रंग वाली थीम, Android सिस्टम के यूज़र इंटरफ़ेस (यूआई) और डिवाइस पर चल रहे ऐप्लिकेशन पर लागू होती है.
Android 10 और इसके बाद के वर्शन में, गहरे रंग वाली थीम को चालू करने के तीन तरीके हैं:
- गहरे रंग वाली थीम चालू करने के लिए, सिस्टम की सेटिंग का इस्तेमाल करें. इसके लिए, सेटिंग > डिसप्ले > थीम पर जाएं.
- यह सुविधा चालू होने पर, सूचना ट्रे से थीम बदलने के लिए क्विक सेटिंग टाइल का इस्तेमाल करें.
- Pixel डिवाइसों पर, बैटरी सेवर मोड चालू करने पर गहरे रंग वाली थीम भी चालू हो जाती है. ऐसा हो सकता है कि अन्य डिवाइसों पर यह सुविधा काम न करे.
वेबव्यू कॉम्पोनेंट का इस्तेमाल करके, वेब पर आधारित कॉन्टेंट पर गहरे रंग वाली थीम लागू करने के बारे में जानने के लिए, वेबव्यू में वेब कॉन्टेंट को गहरे रंग में दिखाना लेख पढ़ें.
अपने ऐप्लिकेशन में गहरे रंग वाली थीम की सुविधा देना
गहरे रंग वाली थीम का इस्तेमाल करने के लिए, अपने ऐप्लिकेशन की थीम को DayNight थीम से इनहेरिट करने के लिए सेट करें. आम तौर पर, यह थीम res/values/styles.xml में मिलती है:
<style name="AppTheme" parent="Theme.AppCompat.DayNight">
Material Components की गहरे रंग वाली थीम का भी इस्तेमाल किया जा सकता है:
<style name="AppTheme" parent="Theme.MaterialComponents.DayNight">
इससे ऐप्लिकेशन की मुख्य थीम, सिस्टम से कंट्रोल किए जाने वाले नाइट मोड के फ़्लैग से जुड़ जाती है. साथ ही, नाइट मोड चालू होने पर ऐप्लिकेशन को डिफ़ॉल्ट रूप से गहरे रंग वाली थीम मिलती है.
थीम और स्टाइल
हार्डकोड किए गए रंगों या आइकॉन का इस्तेमाल करने से बचें. इनका इस्तेमाल, हल्की थीम में किया जाता है. इसके बजाय, थीम एट्रिब्यूट या नाइट-क्वालिफ़ाइड रिसॉर्स का इस्तेमाल करें.
गहरे रंग वाली थीम के लिए, दो थीम एट्रिब्यूट सबसे अहम हैं:
?android:attr/textColorPrimary: अलग-अलग कामों के लिए इस्तेमाल किए जाने वाले टेक्स्ट का रंग. यह हल्के रंग वाली थीम में गहरे रंग का और गहरे रंग वाली थीम में हल्के रंग का होता है. इसमें बंद होने की स्थिति शामिल है.?attr/colorControlNormal: अलग-अलग कामों के लिए इस्तेमाल किए जाने वाले आइकॉन का रंग. इसमें बंद किया गया स्टेटस शामिल है.
हमारा सुझाव है कि आप मटीरियल डिज़ाइन कॉम्पोनेंट का इस्तेमाल करें. ऐसा इसलिए, क्योंकि इसका कलर थीमिंग सिस्टम, जैसे कि थीम एट्रिब्यूट ?attr/colorSurface और ?attr/colorOnSurface, सही रंगों को आसानी से ऐक्सेस करने की सुविधा देता है. अपनी थीम में इन एट्रिब्यूट को पसंद के मुताबिक बनाया जा सकता है.
ऐप्लिकेशन में थीम बदलना
ऐप्लिकेशन के चलने के दौरान, उपयोगकर्ताओं को उसकी थीम बदलने की सुविधा दी जा सकती है. यहां दिए गए विकल्प सुझाए गए हैं:
- हल्का
- गहरा
- सिस्टम डिफ़ॉल्ट (सुझाया गया डिफ़ॉल्ट विकल्प)
ये विकल्प, सीधे तौर पर AppCompat.DayNight मोड से मैप होते हैं:
हल्का:
MODE_NIGHT_NO.गहरा:
MODE_NIGHT_YES.सिस्टम डिफ़ॉल्ट:
MODE_NIGHT_FOLLOW_SYSTEM.
थीम बदलने के लिए, यह तरीका अपनाएं:
एपीआई लेवल 31 और इसके बाद के वर्शन पर,
UiModeManager#setApplicationNightModeका इस्तेमाल करें, ताकि सिस्टम को पता चल सके कि आपका ऐप्लिकेशन किस थीम पर काम करता है. इससे सिस्टम, स्प्लैश स्क्रीन के दौरान थीम को मैच कर पाता है.एपीआई लेवल 30 और इससे पहले के लेवल पर, थीम बदलने के लिए
AppCompatDelegate.setDefaultNightMode()का इस्तेमाल करें.
गहरे रंग वाली थीम को तुरंत लागू करने की सुविधा
Android 10 में, गहरे रंग वाली थीम को तुरंत लागू करने की सुविधा मिलती है. इसकी मदद से, डेवलपर DayNight थीम को सेट किए बिना ही, गहरे रंग वाली थीम को तुरंत लागू कर सकते हैं.
गहरे रंग वाली थीम को तुरंत लागू करने की सुविधा, हल्के रंग वाली थीम के आपके ऐप्लिकेशन के हर व्यू का विश्लेषण करती है. साथ ही, स्क्रीन पर दिखने से पहले ही, गहरे रंग वाली थीम को अपने-आप लागू कर देती है. गहरे रंग वाली थीम को लागू करने में लगने वाले समय को कम करने के लिए, गहरे रंग वाली थीम को तुरंत लागू करने की सुविधा और नेटिव तरीके से लागू करने की सुविधा को एक साथ इस्तेमाल किया जा सकता है.
ऐप्लिकेशन को गहरे रंग वाली थीम को तुरंत लागू करने की सुविधा के लिए शामिल होना होगा. इसके लिए, गतिविधि की थीम में android:forceDarkAllowed="true" सेट करना होगा. यह एट्रिब्यूट, सिस्टम और AndroidX की ओर से उपलब्ध कराई गई सभी लाइट थीम पर सेट होता है. जैसे, Theme.Material.Light. गहरे रंग वाली थीम को तुरंत लागू करने की सुविधा का इस्तेमाल करते समय, अपने ऐप्लिकेशन की अच्छी तरह से जांच करें. साथ ही, ज़रूरत के हिसाब से व्यू को बाहर रखें.
अगर आपका ऐप्लिकेशन गहरे रंग वाली थीम का इस्तेमाल करता है, जैसे कि Theme.Material), तो गहरे रंग वाली थीम को तुरंत लागू करने की सुविधा काम नहीं करती. इसी तरह, अगर आपके ऐप्लिकेशन की थीम DayNight थीम से ली गई है, तो थीम अपने-आप स्विच होने की वजह से, गहरे रंग वाली थीम को तुरंत लागू करने की सुविधा लागू नहीं होती.
किसी व्यू पर, गहरे रंग वाली थीम को तुरंत लागू करने की सुविधा बंद करना
गहरे रंग वाली थीम को तुरंत लागू करने की सुविधा को, android:forceDarkAllowed लेआउट एट्रिब्यूट या setForceDarkAllowed() की मदद से, खास व्यू पर कंट्रोल किया जा सकता है.
वेब कॉन्टेंट
वेब पर आधारित कॉन्टेंट में गहरे रंग वाली थीम इस्तेमाल करने के बारे में जानकारी पाने के लिए, वेबव्यू में वेब कॉन्टेंट को गहरे रंग में दिखाना लेख पढ़ें. वेबव्यू पर गहरे रंग वाली थीम लागू करने का उदाहरण देखने के लिए, GitHub पर वेबव्यू का डेमो देखें.
सबसे सही तरीके
यहां दिए गए सेक्शन में, गहरे रंग वाली थीम लागू करने के सबसे सही तरीके बताए गए हैं.
सूचनाएं और विजेट
डिवाइस पर दिखने वाले, लेकिन सीधे तौर पर कंट्रोल न किए जा सकने वाले यूज़र इंटरफ़ेस (यूआई) के लिए, पक्का करें कि इस्तेमाल किए जाने वाले सभी व्यू, होस्ट ऐप्लिकेशन की थीम के मुताबिक हों. इसके दो उदाहरण हैं: सूचनाएं और लॉन्चर विजेट.
सूचनाएं
सिस्टम से मिलने वाले सूचना टेंप्लेट इस्तेमाल करें, जैसे कि MessagingStyle. इसका मतलब है कि सिस्टम, व्यू की सही स्टाइलिंग लागू करने के लिए ज़िम्मेदार है.
विजेट और कस्टम सूचना व्यू
लॉन्चर विजेट के लिए या अगर आपका ऐप्लिकेशन, सूचना के कॉन्टेंट के लिए कस्टम व्यू का इस्तेमाल करता है, तो कॉन्टेंट को हल्के और गहरे रंग वाली थीम, दोनों पर टेस्ट करें.
अक्सर होने वाली गलतियों में ये शामिल हैं:
- यह मानकर कि बैकग्राउंड का रंग हमेशा हल्का होता है.
- टेक्स्ट के रंगों को हार्डकोड करना.
- डिफ़ॉल्ट टेक्स्ट कलर का इस्तेमाल करते समय, हार्डकोड किया गया बैकग्राउंड कलर सेट करना.
- ड्रॉएबल आइकॉन का इस्तेमाल करना, जो स्टैटिक रंग का हो.
इन सभी मामलों में, हार्डकोड किए गए रंगों के बजाय सही थीम एट्रिब्यूट का इस्तेमाल करें.
लॉन्च स्क्रीन
अगर आपके ऐप्लिकेशन में कस्टम लॉन्च स्क्रीन है, तो आपको उसमें बदलाव करना पड़ सकता है, ताकि वह चुनी गई थीम के हिसाब से दिखे.
हार्डकोड किए गए किसी भी रंग को हटाएं. जैसे, प्रोग्राम के हिसाब से सफ़ेद रंग पर सेट किए गए बैकग्राउंड के रंग. इसके बजाय, ?android:attr/colorBackground थीम एट्रिब्यूट का इस्तेमाल करें.
कॉन्फ़िगरेशन में बदलाव
जब सिस्टम सेटिंग या AppCompat की मदद से ऐप्लिकेशन की थीम बदलती है, तो इससे uiMode कॉन्फ़िगरेशन में बदलाव ट्रिगर होता है. इसका मतलब है कि गतिविधियां अपने-आप फिर से बन जाती हैं.
कुछ मामलों में, हो सकता है कि आप चाहें कि ऐप्लिकेशन, कॉन्फ़िगरेशन में हुए बदलाव को हैंडल करे. उदाहरण के लिए, हो सकता है कि आप कॉन्फ़िगरेशन में बदलाव करने में देरी करना चाहें, क्योंकि कोई वीडियो चल रहा है.
कोई ऐप्लिकेशन, गहरे रंग वाली थीम को लागू करने की प्रोसेस को मैनेज कर सकता है. इसके लिए, उसे यह एलान करना होगा कि हर Activity, uiMode कॉन्फ़िगरेशन में होने वाले बदलाव को मैनेज कर सकता है:
<activity
android:name=".MyActivity"
android:configChanges="uiMode" />
जब कोई Activity यह एलान करता है कि वह कॉन्फ़िगरेशन में होने वाले बदलावों को मैनेज करता है, तो थीम में बदलाव होने पर उसका onConfigurationChanged() तरीका लागू होता है.
मौजूदा थीम देखने के लिए, ऐप्लिकेशन इस तरह का कोड चला सकते हैं:
Kotlin
val currentNightMode = configuration.uiMode and Configuration.UI_MODE_NIGHT_MASK when (currentNightMode) { Configuration.UI_MODE_NIGHT_NO -> {} // Night mode is not active, we're using the light theme. Configuration.UI_MODE_NIGHT_YES -> {} // Night mode is active, we're using dark theme. }
Java
int currentNightMode = configuration.uiMode & Configuration.UI_MODE_NIGHT_MASK; switch (currentNightMode) { case Configuration.UI_MODE_NIGHT_NO: // Night mode is not active, we're using the light theme break; case Configuration.UI_MODE_NIGHT_YES: // Night mode is active, we're using dark theme break; }