गहरे रंग वाली थीम लागू करना

लिखने का तरीका आज़माएं
Android के लिए, Jetpack Compose हमारा सुझाया गया यूज़र इंटरफ़ेस (यूआई) टूलकिट है. Compose में थीम बनाने की सुविधा इस्तेमाल करने का तरीका जानें.

पहली इमेज. गहरे रंग वाली थीम.

गहरे रंग वाली थीम, Android 10 (एपीआई लेवल 29) और उसके बाद वाले वर्शन में उपलब्ध है. इसमें मिलने वाले फ़ायदे:

  • इसमें बैटरी की खपत काफ़ी कम हो जाती है. यह इस बात पर निर्भर करता है कि डिवाइस का इस्तेमाल कहां किया जा रहा है किया जाता है.
  • इससे कम दृष्टि वाले लोगों और संवेदनशील सेहत वाले लोगों को ज़्यादा आसानी से दिखते हैं चमकदार रोशनी.
  • इस सुविधा की मदद से, कम रोशनी में भी डिवाइस को आसानी से इस्तेमाल किया जा सकता है.

गहरे रंग वाली थीम, डिवाइस पर चलने वाले Android सिस्टम के यूज़र इंटरफ़ेस (यूआई) और ऐप्लिकेशन पर लागू होती है.

Android 10 और उसके बाद वाले वर्शन में गहरे रंग वाली थीम चालू करने के तीन तरीके हैं:

  • सिस्टम सेटिंग का इस्तेमाल करने के लिए, सेटिंग > डिसप्ले > थीम से गहरे रंग वाली थीम चालू करें.
  • सूचना ट्रे से थीम बदलने के लिए क्विक सेटिंग टाइल का इस्तेमाल करें, चालू करें.
  • Pixel डिवाइसों पर गहरे रंग वाली थीम चालू करने के लिए, बैटरी सेवर मोड चालू करें समय. अन्य डिवाइसों पर यह सुविधा शायद काम न करे.

वेबव्यू का इस्तेमाल करके, वेब पर आधारित कॉन्टेंट पर गहरे रंग वाली थीम लागू करने के निर्देश पाने के बारे में जानकारी कॉम्पोनेंट के लिए, वेबव्यू में डार्क वेब कॉन्टेंट देखें.

आपके ऐप्लिकेशन में गहरे रंग वाली थीम काम करती है

गहरे रंग वाली थीम के लिए, अपने ऐप्लिकेशन की थीम सेट करें—आम तौर पर यह थीम res/values/styles.xml—किसी DayNight थीम से इनहेरिट करने के लिए:

<style name="AppTheme" parent="Theme.AppCompat.DayNight">

मटीरियल कॉम्पोनेंट गहरे रंग वाला मोड भी इस्तेमाल किया जा सकता है थीम:

<style name="AppTheme" parent="Theme.MaterialComponents.DayNight">

इससे ऐप्लिकेशन की मुख्य थीम, सिस्टम से कंट्रोल किए जाने वाले नाइट मोड के फ़्लैग और इस सेटिंग के चालू होने पर, ऐप्लिकेशन के लिए गहरे रंग वाली डिफ़ॉल्ट थीम लागू होती है.

थीम और स्टाइल

हार्डकोड किए गए रंगों या आइकॉन का इस्तेमाल, हल्के रंग वाली थीम के तहत न करें. इस्तेमाल की जाने वाली चीज़ें इसके अलावा, थीम एट्रिब्यूट या रात में काम आने वाले संसाधनों का इस्तेमाल करें.

गहरे रंग वाली थीम के लिए, दो थीम एट्रिब्यूट सबसे अहम होते हैं:

  • ?android:attr/textColorPrimary: अलग-अलग कामों के लिए इस्तेमाल होने वाला टेक्स्ट रंग. हां हल्के रंग वाली थीम में पास-काला और गहरे रंग वाली थीम में नियर-व्हाइट. इसमें शामिल है बंद है.
  • ?attr/colorControlNormal: अलग-अलग कामों के लिए इस्तेमाल होने वाला आइकॉन रंग. इसमें शामिल है बंद है.

हम मटीरियल डिज़ाइन का इस्तेमाल करने का सुझाव देते हैं कॉम्पोनेंट, क्योंकि इसकी कलर थीमिंग है सिस्टम, जैसे कि थीम एट्रिब्यूट ?attr/colorSurface और ?attr/colorOnSurface, से आसानी से ऐक्सेस किया जा सकता है सही रंगों का इस्तेमाल कर सकते हैं. अपनी थीम में, इन एट्रिब्यूट को पसंद के मुताबिक बनाया जा सकता है.

ऐप्लिकेशन में थीम बदलना

ऐप्लिकेशन के चलने के दौरान, उपयोगकर्ताओं को ऐप्लिकेशन की थीम बदलने की अनुमति दी जा सकती है. नीचे दिए गए ये सुझाए गए विकल्प हैं:

  • हल्का
  • गहरे रंग वाली थीम
  • सिस्टम डिफ़ॉल्ट (सुझाया गया डिफ़ॉल्ट विकल्प)

ये विकल्प सीधे AppCompat.DayNight मोड से मैप करते हैं:

थीम बदलने के लिए, ये काम करें:

  • एपीआई लेवल 31 और उसके बाद के वर्शन पर, UiModeManager#setApplicationNightMode ताकि सिस्टम को यह बताया जा सके कि आपके ऐप्लिकेशन की थीम कौनसी है. इससे सिस्टम, थीम को लागू करता है.

  • एपीआई लेवल 30 और इससे पहले के लेवल पर, इनका इस्तेमाल करें AppCompatDelegate.setDefaultNightMode() का इस्तेमाल करें.

गहरे रंग वाली थीम को ज़बरदस्ती चालू करें

Android 10, Force डार्क की एक सुविधा उपलब्ध कराता है, जिससे डेवलपर को ये काम करने में मदद मिलती है DayNight थीम साफ़ तौर पर सेट किए बिना, गहरे रंग वाली थीम को आसानी से लागू किया जा सकता है.

ज़बरदस्ती डार्क मोड में, हल्के रंग की थीम वाले ऐप्लिकेशन के हर व्यू का विश्लेषण किया जाता है और गहरे रंग वाली थीम लागू की जाती है वह स्क्रीन पर बनाए जाने से पहले अपने-आप चालू हो जाता है. आप 'फ़ोर्स डार्क' को मिला-जुलाकर इस्तेमाल कर सकते हैं और स्थानीय तौर पर लागू करने से, कम समय में डार्क सुविधा मिलती है थीम.

ऐप्लिकेशन को फ़ोर्स डार्क मोड के लिए ऑप्ट इन करना होगा. इसके लिए, आपको android:forceDarkAllowed="true" गतिविधि की थीम. यह एट्रिब्यूट सभी सिस्टम पर सेट किया जाता है- और AndroidX वाली हल्के रंग वाली थीम, जैसे कि Theme.Material.Light. जब आप गहरे रंग वाली थीम लागू करें, अपने ऐप्लिकेशन की अच्छी तरह से जांच करें, और ज़रूरत के मुताबिक व्यू को उपलब्ध न कराएं.

अगर आपका ऐप्लिकेशन गहरे रंग वाली थीम का इस्तेमाल करता है, जैसे कि Theme.Material, तो ज़बरदस्ती डार्क थीम का इस्तेमाल नहीं किया जा सकता लागू किया गया. इसी तरह, अगर आपके ऐप्लिकेशन की थीम किसी DayNight थीम से ली गई है, तो फ़ोर्स थीम अपने-आप स्विच होने की वजह से, गहरे रंग वाली थीम लागू नहीं होती.

किसी व्यू पर गहरे रंग को ज़बरदस्ती चालू करने की सुविधा बंद करें

कुछ व्यू के लिए, ज़बरदस्ती डार्क मोड को कंट्रोल किया जा सकता है. ऐसा करने के लिए, android:forceDarkAllowed लेआउट एट्रिब्यूट या इसके साथ setForceDarkAllowed().

वेब कॉन्टेंट

वेब पर आधारित कॉन्टेंट में गहरे रंग वाली थीम इस्तेमाल करने के बारे में जानकारी पाने के लिए, Darken Web पर जाएं वेबव्यू में कॉन्टेंट शामिल होता है. गहरे रंग वाली थीम के उदाहरण के लिए वेबव्यू पर लागू की गई हों, तो वेबव्यू डेमो देखें 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;
}