सिद्धांत और Jetpack Compose को लागू करना
रिसॉर्स, अतिरिक्त फ़ाइलें और स्टैटिक कॉन्टेंट होते हैं. इनका इस्तेमाल आपका कोड करता है. जैसे, बिटमैप, लेआउट की परिभाषाएं, उपयोगकर्ता इंटरफ़ेस स्ट्रिंग, ऐनिमेशन के निर्देश वगैरह.
ऐप्लिकेशन के संसाधनों, जैसे कि इमेज और स्ट्रिंग को हमेशा अपने कोड से अलग रखें, ताकि आप उन्हें अलग से मैनेज कर सकें. साथ ही, डिवाइस के खास कॉन्फ़िगरेशन के लिए, वैकल्पिक संसाधन उपलब्ध कराएं. इसके लिए, उन्हें खास नाम वाली संसाधन डायरेक्ट्री में ग्रुप करें. रनटाइम के दौरान, Android मौजूदा कॉन्फ़िगरेशन के आधार पर सही संसाधन का इस्तेमाल करता है. उदाहरण के लिए, हो सकता है कि आपको स्क्रीन के साइज़ के हिसाब से अलग यूज़र इंटरफ़ेस (यूआई) लेआउट या भाषा की सेटिंग के हिसाब से अलग-अलग स्ट्रिंग देनी हों.
अपने ऐप्लिकेशन के संसाधनों को बाहरी बनाने के बाद, उन्हें ऐक्सेस किया जा सकता है. इसके लिए, आपको उन संसाधन आईडी का इस्तेमाल करना होगा जो आपके प्रोजेक्ट की R क्लास में जनरेट होते हैं. इस दस्तावेज़ में बताया गया है कि अपने Android प्रोजेक्ट में संसाधनों को कैसे ग्रुप किया जाए. इसमें यह भी बताया गया है कि डिवाइस के खास कॉन्फ़िगरेशन के लिए, वैकल्पिक संसाधन कैसे उपलब्ध कराए जाएं. साथ ही, उन्हें अपने ऐप्लिकेशन कोड या अन्य एक्सएमएल फ़ाइलों से कैसे ऐक्सेस किया जाए.
ग्रुप किए गए संसाधन टाइप
हर तरह के संसाधन को अपने प्रोजेक्ट की res/डायरेक्ट्री की किसी खास सबडायरेक्ट्री में रखें. उदाहरण के लिए, यहां एक सामान्य प्रोजेक्ट के लिए फ़ाइल का क्रम दिया गया है:
MyProject/
src/
MyActivity.java
res/
drawable/
graphic.png
layout/
main.xml
info.xml
mipmap/
icon.png
values/
strings.xml
res/ डायरेक्ट्री में, इसकी सबडायरेक्ट्री में मौजूद सभी संसाधन शामिल होते हैं: एक इमेज संसाधन, दो लेआउट संसाधन, लॉन्चर आइकॉन के लिए mipmap/ डायरेक्ट्री, और एक स्ट्रिंग संसाधन फ़ाइल. संसाधन डायरेक्ट्री के नाम ज़रूरी हैं. इनके बारे में टेबल 1 में बताया गया है.
पहली टेबल. प्रोजेक्ट res/ डायरेक्ट्री में, इन संसाधन डायरेक्ट्री का इस्तेमाल किया जा सकता है.
डायरेक्ट्री |
संसाधन का टाइप |
|
|
प्रॉपर्टी ऐनिमेशन तय करने वाली एक्सएमएल फ़ाइलें. |
|
|
एक्सएमएल फ़ाइलें, जो ट्वीन ऐनिमेशन तय करती हैं. प्रॉपर्टी के ऐनिमेशन भी इस डायरेक्ट्री में सेव किए जा सकते हैं. हालांकि, प्रॉपर्टी के ऐनिमेशन के लिए |
|
|
ऐसी एक्सएमएल फ़ाइलें जो रंगों की स्थिति के हिसाब से सूची तय करती हैं. ज़्यादा जानकारी के लिए, कलर स्टेट लिस्ट रिसॉर्स देखें. |
|
|
बिटमैप फ़ाइलें (PNG, .
ज़्यादा जानकारी के लिए, ड्रॉएबल रिसॉर्स देखें. |
|
|
अलग-अलग लॉन्चर आइकॉन डेंसिटी के लिए ड्रॉएबल फ़ाइलें. |
|
|
एक्सएमएल फ़ाइलें, जो यूज़र इंटरफ़ेस लेआउट तय करती हैं. ज़्यादा जानकारी के लिए, लेआउट संसाधन देखें. |
|
|
ऐसी एक्सएमएल फ़ाइलें जो ऐप्लिकेशन के मेन्यू तय करती हैं. जैसे, विकल्प मेन्यू, कॉन्टेक्स्ट मेन्यू या सबमेन्यू. ज़्यादा जानकारी के लिए, मेन्यू रिसॉर्स देखें. |
|
|
फ़ाइलों को उनके रॉ फ़ॉर्म में सेव करने के लिए. इन संसाधनों को रॉ हालांकि, अगर आपको ओरिजनल फ़ाइल के नाम और फ़ाइल के क्रम को ऐक्सेस करना है, तो |
|
|
ऐसी एक्सएमएल फ़ाइलें जिनमें स्ट्रिंग, पूर्णांक, और रंग जैसी सामान्य वैल्यू शामिल होती हैं. वहीं, अन्य हर संसाधन को उसके अपने एक्सएमएल एलिमेंट के साथ तय किया जाता है. इसलिए, फ़ाइल का नाम अपनी पसंद के हिसाब से रखा जा सकता है. साथ ही, एक ही फ़ाइल में अलग-अलग तरह के संसाधन रखे जा सकते हैं. हालांकि, बेहतर तरीके से समझने के लिए, अलग-अलग फ़ाइलों में यूनीक रिसॉर्स टाइप रखे जा सकते हैं. उदाहरण के लिए, इस डायरेक्ट्री में बनाए जा सकने वाले संसाधनों के लिए, फ़ाइल के नाम रखने के कुछ नियम यहां दिए गए हैं:
ज़्यादा जानकारी के लिए, स्ट्रिंग रिसॉर्स, स्टाइल रिसॉर्स, और अन्य रिसॉर्स टाइप देखें. |
|
|
कोई भी एक्सएमएल फ़ाइल, जिसे रनटाइम के दौरान |
|
|
TTF, OTF या TTC जैसे एक्सटेंशन वाली फ़ॉन्ट फ़ाइलें या ऐसी एक्सएमएल फ़ाइलें जिनमें |
टेबल 1 में बताई गई सबडायरेक्ट्री में सेव किए गए रिसॉर्स, आपके डिफ़ॉल्ट रिसॉर्स होते हैं. इसका मतलब है कि ये संसाधन, आपके ऐप्लिकेशन के लिए डिफ़ॉल्ट डिज़ाइन और कॉन्टेंट तय करते हैं. हालांकि, Android पर काम करने वाले अलग-अलग डिवाइसों के लिए, अलग-अलग तरह के संसाधनों की ज़रूरत पड़ सकती है.
उदाहरण के लिए, सामान्य से बड़ी स्क्रीन वाले डिवाइसों के लिए, अलग-अलग लेआउट संसाधन दिए जा सकते हैं. इससे स्क्रीन पर ज़्यादा जगह का फ़ायदा लिया जा सकता है. डिवाइस की भाषा की सेटिंग के आधार पर, अपने उपयोगकर्ता इंटरफ़ेस में टेक्स्ट का अनुवाद करने वाली अलग-अलग स्ट्रिंग रिसॉर्स भी उपलब्ध कराए जा सकते हैं. अलग-अलग डिवाइस कॉन्फ़िगरेशन के लिए, ये अलग-अलग संसाधन उपलब्ध कराने के लिए, आपको डिफ़ॉल्ट संसाधनों के अलावा, अन्य संसाधन भी उपलब्ध कराने होंगे.
वैकल्पिक रिसॉर्स उपलब्ध कराना
ज़्यादातर ऐप्लिकेशन, डिवाइस के खास कॉन्फ़िगरेशन के साथ काम करने के लिए, वैकल्पिक संसाधन उपलब्ध कराते हैं. उदाहरण के लिए, अलग-अलग स्क्रीन डेंसिटी के लिए वैकल्पिक ड्रॉएबल रिसॉर्स और अलग-अलग भाषाओं के लिए वैकल्पिक स्ट्रिंग रिसॉर्स शामिल करें. रनटाइम के दौरान, Android मौजूदा डिवाइस कॉन्फ़िगरेशन का पता लगाता है और आपके ऐप्लिकेशन के लिए सही संसाधन लोड करता है.

इमेज 1. स्क्रीन के साइज़ के आधार पर, लेआउट के अलग-अलग संसाधनों का इस्तेमाल करने वाले दो डिवाइस.
संसाधनों के किसी सेट के लिए, कॉन्फ़िगरेशन के हिसाब से विकल्प तय करने के लिए, यह तरीका अपनाएं:
res/में,<resources_name>-<qualifier>नाम की एक नई डायरेक्ट्री बनाएं.<resources_name>, टेबल 1 में दिए गए डिफ़ॉल्ट संसाधनों का डायरेक्ट्री नाम है.<qualifier>एक ऐसा नाम है जो किसी कॉन्फ़िगरेशन के बारे में बताता है. इस कॉन्फ़िगरेशन के लिए, इन संसाधनों का इस्तेमाल किया जाना है. इसे टेबल 2 में बताया गया है.
एक से ज़्यादा
<qualifier>जोड़े जा सकते हैं. हर एक को डैश से अलग करें.इस नई डायरेक्ट्री में, सही वैकल्पिक संसाधन सेव करें. संसाधन फ़ाइलों के नाम, डिफ़ॉल्ट संसाधन फ़ाइलों के नाम से पूरी तरह मेल खाने चाहिए.
उदाहरण के लिए, यहां कुछ डिफ़ॉल्ट और वैकल्पिक संसाधन दिए गए हैं:
res/
drawable/
icon.png
background.png
drawable-hdpi/
icon.png
background.png
hdpi क्वालिफ़ायर से पता चलता है कि उस डायरेक्ट्री में मौजूद संसाधन, ज़्यादा डेनसिटी वाली स्क्रीन वाले डिवाइसों के लिए हैं. इन ड्रॉएबल डायरेक्ट्री में मौजूद इमेज, स्क्रीन की खास डेंसिटी के हिसाब से साइज़ की गई हैं. हालांकि, फ़ाइलों के नाम एक जैसे हैं.
इस तरह, icon.png या background.png इमेज का रेफ़रंस देने के लिए इस्तेमाल किया गया रिसॉर्स आईडी हमेशा एक ही रहता है. Android, हर संसाधन के उस वर्शन को चुनता है जो मौजूदा डिवाइस के साथ सबसे अच्छी तरह से काम करता है. इसके लिए, वह डिवाइस के कॉन्फ़िगरेशन की जानकारी की तुलना, संसाधन डायरेक्ट्री के नाम में मौजूद क्वालिफ़ायर से करता है.
दूसरी टेबल में, प्राथमिकता के क्रम में मान्य कॉन्फ़िगरेशन क्वालिफ़ायर दिए गए हैं. एक डायरेक्ट्री के नाम में एक से ज़्यादा क्वालिफ़ायर जोड़े जा सकते हैं. इसके लिए, हर क्वालिफ़ायर को डैश से अलग करें. अगर किसी संसाधन डायरेक्ट्री के लिए एक से ज़्यादा क्वालिफ़ायर का इस्तेमाल किया जाता है, तो आपको उन्हें डायरेक्ट्री के नाम में जोड़ना होगा. ऐसा उसी क्रम में करें जिस क्रम में वे टेबल में दिए गए हैं.
टेबल 2. कॉन्फ़िगरेशन क्वालिफ़ायर के नाम.
कॉन्फ़िगरेशन |
क्वालिफ़ायर वैल्यू |
ब्यौरा |
एमसीसी और एमएनसी |
उदाहरण:
|
मोबाइल कंट्री कोड (एमसीसी). इसके बाद, डिवाइस में मौजूद सिम कार्ड से मिला मोबाइल नेटवर्क कोड (एमएनसी) भी शामिल किया जा सकता है. उदाहरण के लिए, अगर डिवाइस रेडियो कनेक्शन का इस्तेमाल करता है (यानी कि यह जीएसएम फ़ोन है), तो एमसीसी और एमएनसी की वैल्यू, सिम कार्ड से मिलती हैं. सिर्फ़ एमसीसी का इस्तेमाल भी किया जा सकता है. उदाहरण के लिए, अपने ऐप्लिकेशन में देश के हिसाब से कानूनी संसाधन शामिल करने के लिए. अगर आपको सिर्फ़ भाषा के आधार पर जानकारी देनी है, तो भाषा, स्क्रिप्ट (ज़रूरी नहीं), और क्षेत्र (ज़रूरी नहीं) क्वालिफ़ायर का इस्तेमाल करें. अगर एमसीसी और एमएनसी क्वालिफ़ायर का इस्तेमाल किया जाता है, तो इसे ध्यान से करें. साथ ही, यह जांच लें कि यह आपकी उम्मीद के मुताबिक काम कर रहा है या नहीं. कॉन्फ़िगरेशन फ़ील्ड |
भाषा, स्क्रिप्ट (ज़रूरी नहीं), और क्षेत्र (ज़रूरी नहीं) |
उदाहरण:
|
भाषा को दो अक्षरों वाले ISO 639-2{:.external} भाषा कोड से तय किया जाता है. इसके बाद, दो अक्षरों वाला ISO 3166-1-alpha-2{:.external} क्षेत्र कोड (इससे पहले छोटे अक्षरों वाला कोड, केस-सेंसिटिव (बड़े और छोटे अक्षरों में अंतर) नहीं होते हैं. Android 7.0 (एपीआई लेवल 24) में, BCP 47 भाषा टैग{:.external} के लिए सहायता शुरू की गई थी. इनका इस्तेमाल, भाषा और क्षेत्र के हिसाब से उपलब्ध संसाधनों को बेहतर बनाने के लिए किया जा सकता है. भाषा टैग, एक या उससे ज़्यादा सबटैग के क्रम से बना होता है. इनमें से हर सबटैग, पूरे टैग से पहचानी गई भाषा की रेंज को बेहतर बनाता है या कम करता है. भाषा के टैग के बारे में ज़्यादा जानकारी के लिए, भाषाओं की पहचान करने वाले टैग{:.external} देखें. BCP 47 भाषा टैग का इस्तेमाल करने के लिए, अगर उपयोगकर्ता सिस्टम की सेटिंग में जाकर भाषा बदलते हैं, तो आपके ऐप्लिकेशन के लिए भाषा का टैग बदल सकता है. इसकी वजह से, रनटाइम के दौरान आपके ऐप्लिकेशन पर क्या असर पड़ सकता है, इस बारे में जानने के लिए कॉन्फ़िगरेशन में हुए बदलावों को मैनेज करना लेख पढ़ें. अपने ऐप्लिकेशन को अन्य भाषाओं के लिए स्थानीय भाषा के मुताबिक बनाने के बारे में पूरी जानकारी पाने के लिए, अपने ऐप्लिकेशन को स्थानीय भाषा के मुताबिक बनाएं लेख पढ़ें.
|
| व्याकरण के हिसाब से लिंग | masculinefeminineneuter |
उपयोगकर्ता का व्याकरण के हिसाब से लिंग. इसका इस्तेमाल उन भाषाओं के लिए किया जाता है जिनमें व्याकरण के हिसाब से लिंग होता है. उदाहरण के लिए, अगर आपको फ़्रेंच बोलने वाले लोगों के लिए अलग-अलग संसाधन उपलब्ध कराने हैं, तो यहां दी गई डायरेक्ट्री का इस्तेमाल किया जा सकता है:
Android में अपने हिसाब से जेंडर चुनना देखें.
इसे एपीआई लेवल 34 में जोड़ा गया है. |
लेआउट की दिशा |
|
आपके ऐप्लिकेशन का लेआउट. यह किसी भी संसाधन पर लागू हो सकता है. जैसे, लेआउट, ड्रॉएबल या वैल्यू. उदाहरण के लिए, अगर आपको अरबी भाषा के लिए कोई खास लेआउट और फ़ारसी या हिब्रू जैसी किसी अन्य "दाईं से बाईं ओर" लिखी जाने वाली भाषा के लिए कोई सामान्य लेआउट देना है, तो यहां दी गई डायरेक्ट्री का इस्तेमाल करें:
ध्यान दें: अपने ऐप्लिकेशन के लिए, दाईं से बाईं ओर लेआउट करने की सुविधाएँ चालू करने के लिए, आपको एपीआई लेवल 17 में जोड़ा गया. |
सबसे कम चौड़ाई की स्क्रीन सेट करें |
उदाहरण:
वगैरह |
ऐप्लिकेशन के लिए उपलब्ध स्क्रीन एरिया का सबसे छोटा डाइमेंशन. खास तौर पर, ऐप्लिकेशन विंडो की उदाहरण के लिए, अगर आपके लेआउट के लिए यह ज़रूरी है कि स्क्रीन एरिया का सबसे छोटा डाइमेंशन हमेशा कम से कम 600 डीपी हो, तो इस क्वालिफ़ायर का इस्तेमाल करके, स्क्रीन के सामान्य साइज़ का पता लगाने के लिए, सबसे कम चौड़ाई का इस्तेमाल करना फ़ायदेमंद होता है. ऐसा इसलिए, क्योंकि लेआउट डिज़ाइन करते समय चौड़ाई अक्सर अहम भूमिका निभाती है. यूज़र इंटरफ़ेस (यूआई) को अक्सर वर्टिकल तौर पर स्क्रोल किया जाता है. हालांकि, इसे हॉरिज़ॉन्टल तौर पर कम से कम जगह की ज़रूरत होती है. उपलब्ध चौड़ाई भी यह तय करने में अहम भूमिका निभाती है कि हैंडसेट के लिए एक पैन वाला लेआउट इस्तेमाल करना है या टैबलेट के लिए मल्टीपैन वाला लेआउट. इसलिए, आपको इस बात से ज़्यादा फ़र्क़ पड़ता है कि हर डिवाइस पर सबसे कम चौड़ाई कितनी है. डिवाइस की सबसे कम चौड़ाई में, स्क्रीन डेकोरेशन और सिस्टम यूज़र इंटरफ़ेस (यूआई) को ध्यान में रखा जाता है. उदाहरण के लिए, अगर डिवाइस की स्क्रीन पर ऐसे यूज़र इंटरफ़ेस (यूआई) एलिमेंट मौजूद हैं जो सबसे कम चौड़ाई वाले ऐक्सिस के साथ जगह घेरते हैं, तो सिस्टम सबसे कम चौड़ाई को स्क्रीन के असल साइज़ से कम मानता है. ऐसा इसलिए, क्योंकि ये स्क्रीन पिक्सल आपके यूज़र इंटरफ़ेस (यूआई) के लिए उपलब्ध नहीं हैं. यहां स्क्रीन के सामान्य साइज़ के लिए, कुछ वैल्यू दी गई हैं:
जब आपका ऐप्लिकेशन, एपीआई लेवल 13 में जोड़ा गया.
इस क्वालिफ़ायर का इस्तेमाल करके, अलग-अलग स्क्रीन के लिए डिज़ाइन करने के बारे में ज़्यादा जानने के लिए, व्यू के साथ रिस्पॉन्सिव/अडैप्टिव डिज़ाइन देखें. |
उपलब्ध चौड़ाई और ऊंचाई |
उदाहरण:
वगैरह |
यह विकल्प, स्क्रीन की कम से कम चौड़ाई या ऊंचाई ( उपलब्ध चौड़ाई और ऊंचाई, यह तय करने में अक्सर काम आती है कि मल्टीपैन लेआउट का इस्तेमाल करना है या नहीं. ऐसा इसलिए, क्योंकि टैबलेट डिवाइस पर भी, पोर्ट्रेट ओरिएंटेशन के लिए आपको अक्सर लैंडस्केप ओरिएंटेशन वाला मल्टीपैन लेआउट नहीं चाहिए होता. इसलिए, लेआउट के लिए ज़रूरी कम से कम चौड़ाई और/या ऊंचाई तय करने के लिए, इनका इस्तेमाल किया जा सकता है. इसके लिए, स्क्रीन साइज़ और ओरिएंटेशन क्वालिफ़ायर, दोनों का एक साथ इस्तेमाल करने की ज़रूरत नहीं है. जब आपका ऐप्लिकेशन, इन कॉन्फ़िगरेशन के लिए अलग-अलग वैल्यू वाली कई संसाधन डायरेक्ट्री उपलब्ध कराता है, तो सिस्टम उस डायरेक्ट्री का इस्तेमाल करता है जिसकी वैल्यू, डिवाइस की मौजूदा स्क्रीन की चौड़ाई के सबसे करीब होती है. हालांकि, यह वैल्यू स्क्रीन की चौड़ाई से ज़्यादा नहीं होनी चाहिए. सबसे मिलता-जुलता डाइमेंशन का पता लगाने के लिए, स्क्रीन की असल चौड़ाई और तय की गई चौड़ाई के बीच के अंतर को स्क्रीन की असल ऊंचाई और तय की गई ऊंचाई के बीच के अंतर में जोड़ा जाता है. जिन डाइमेंशन की ऊंचाई और चौड़ाई तय नहीं की गई है उनकी वैल्यू 0 होती है. इन वैल्यू में, विंडो इंसर्ट के लिए इस्तेमाल की गई जगह शामिल नहीं होती. इसलिए, अगर डिवाइस के डिसप्ले के किनारों पर यूज़र इंटरफ़ेस (यूआई) के एलिमेंट मौजूद हैं, तो चौड़ाई और ऊंचाई की वैल्यू, स्क्रीन के असल डाइमेंशन से कम होती हैं. भले ही, ऐप्लिकेशन को कुछ वर्टिकल स्क्रीन डेकोरेशन ऐसे होते हैं जो तय नहीं होते. जैसे, फ़ोन का स्टेटस बार, जिसे फ़ुल स्क्रीन मोड में छिपाया जा सकता है. इन्हें यहां शामिल नहीं किया गया है. साथ ही, टाइटल बार या ऐक्शन बार जैसे विंडो डेकोरेशन भी शामिल नहीं किए गए हैं. इसलिए, ऐप्लिकेशन को उस जगह के लिए तैयार रहना चाहिए जो उन्होंने तय की है. ध्यान दें: सिस्टम, चौड़ाई और ऊंचाई, दोनों के हिसाब से मैच करने वाला संसाधन चुनता है. इसलिए, ऐसे संसाधन को प्राथमिकता दी जाती है जिसमें दोनों के बारे में बताया गया हो. इसके बजाय, ऐसे संसाधन को प्राथमिकता नहीं दी जाती है जिसमें सिर्फ़ एक के बारे में बताया गया हो. उदाहरण के लिए, अगर स्क्रीन की चौड़ाई 720 डीपी और लंबाई 1280 डीपी है, तो w720dp के तौर पर क्वालिफ़ाई किए गए संसाधन के बजाय, w700dp-h1200dp के तौर पर क्वालिफ़ाई किए गए संसाधन को चुना जाएगा. भले ही, पहला संसाधन स्क्रीन के डाइमेंशन से पूरी तरह मेल खाता हो. एपीआई लेवल 13 में जोड़ा गया.
इस क्वालिफ़ायर का इस्तेमाल करके, अलग-अलग स्क्रीन के लिए डिज़ाइन करने के बारे में ज़्यादा जानने के लिए, व्यू के साथ रिस्पॉन्सिव/अडैप्टिव डिज़ाइन देखें. |
स्क्रीन का साइज़ |
|
ध्यान दें: साइज़ क्वालिफ़ायर का इस्तेमाल करने का मतलब यह नहीं है कि संसाधन सिर्फ़ उस साइज़ की स्क्रीन के लिए हैं. अगर आपने क्वालिफ़ायर के साथ ऐसे वैकल्पिक संसाधन नहीं दिए हैं जो डिवाइस के मौजूदा कॉन्फ़िगरेशन से बेहतर तरीके से मेल खाते हैं, तो सिस्टम उन संसाधनों का इस्तेमाल कर सकता है जो सबसे ज़्यादा मेल खाते हैं. चेतावनी: अगर आपके सभी संसाधनों में, स्क्रीन के मौजूदा साइज़ से बड़ा साइज़ क्वालिफ़ायर इस्तेमाल किया जाता है, तो सिस्टम उनका इस्तेमाल नहीं करता है. साथ ही, रनटाइम के दौरान आपका ऐप्लिकेशन क्रैश हो जाता है. उदाहरण के लिए, ऐसा तब होता है, जब सभी लेआउट रिसॉर्स को इसे एपीआई लेवल 4 में जोड़ा गया है.
ज़्यादा जानकारी के लिए, स्क्रीन के साथ काम करने की सुविधा के बारे में खास जानकारी लेख पढ़ें. |
स्क्रीन का आसपेक्ट रेशियो |
|
इसे एपीआई लेवल 4 में जोड़ा गया है. यह पूरी तरह से स्क्रीन के आसपेक्ट रेशियो पर आधारित होता है (
|
गोल स्क्रीन |
|
एपीआई लेवल 23 में जोड़ा गया.
|
वाइड कलर गैमट |
|
इसे एपीआई लेवल 26 में जोड़ा गया है.
|
हाई डाइनैमिक रेंज (एचडीआर) |
|
इसे एपीआई लेवल 26 में जोड़ा गया है.
|
स्क्रीन की दिशा |
|
अगर उपयोगकर्ता स्क्रीन को घुमाता है, तो ऐप्लिकेशन के चालू रहने के दौरान यह बदल सकता है. इसकी वजह से, रनटाइम के दौरान आपके ऐप्लिकेशन पर क्या असर पड़ता है, इस बारे में जानने के लिए कॉन्फ़िगरेशन में हुए बदलावों को मैनेज करना लेख पढ़ें.
|
यूज़र इंटरफ़ेस (यूआई) मोड |
|
एपीआई लेवल 8 में जोड़ा गया; टेलीविज़न को एपीआई 13 में जोड़ा गया; डिवाइस को एपीआई 16 में जोड़ा गया; घड़ी को एपीआई 20 में जोड़ा गया; वीआर हेडसेट को एपीआई 26 में जोड़ा गया. डिवाइस को डॉक में लगाने या निकालने पर, आपका ऐप्लिकेशन कैसे जवाब दे सकता है, इस बारे में जानकारी पाने के लिए डॉक करने की स्थिति और टाइप का पता लगाना और उसकी निगरानी करना लेख पढ़ें. अगर उपयोगकर्ता डिवाइस को डॉक में रखता है, तो ऐप्लिकेशन के चालू रहने के दौरान यह बदल सकता है. |
नाइट मोड |
|
एपीआई लेवल 8 में जोड़ा गया. अगर नाइट मोड को ऑटो मोड (डिफ़ॉल्ट) पर सेट किया जाता है, तो ऐप्लिकेशन के इस्तेमाल के दौरान यह मोड बदल सकता है. ऐसे में, दिन के समय के हिसाब से मोड बदलता है. |
स्क्रीन पिक्सल डेंसिटी (डीपीआई) |
|
छह मुख्य डेंसिटी (tvdpi डेंसिटी को छोड़कर) के बीच, 3:4:6:8:12:16 का स्केलिंग अनुपात होता है. इसलिए, ldpi में 9x9 बिटमैप, mdpi में 12x12, hdpi में 18x18, xhdpi में 24x24 वगैरह होता है. ध्यान दें: डेंसिटी क्वालिफ़ायर का इस्तेमाल करने का मतलब यह नहीं है कि रिसॉर्स सिर्फ़ उस डेंसिटी वाली स्क्रीन के लिए हैं. अगर आपने क्वालिफ़ायर के साथ वैकल्पिक संसाधन नहीं दिए हैं, जो डिवाइस के मौजूदा कॉन्फ़िगरेशन से बेहतर तरीके से मेल खाते हैं, तो सिस्टम उन संसाधनों का इस्तेमाल करता है जो सबसे ज़्यादा मेल खाते हैं. अलग-अलग स्क्रीन डेंसिटी को मैनेज करने और Android, बिटमैप को मौजूदा डेंसिटी के हिसाब से कैसे स्केल करता है, इस बारे में ज़्यादा जानने के लिए, स्क्रीन के साथ काम करने की सुविधा के बारे में खास जानकारी देखें. |
टचस्क्रीन का टाइप |
|
|
कीबोर्ड उपलब्ध है या नहीं |
|
अगर आपने अगर उपयोगकर्ता हार्डवेयर कीबोर्ड खोलता है, तो ऐप्लिकेशन के चालू रहने के दौरान यह बदल सकता है. इसकी वजह से, रनटाइम के दौरान आपके ऐप्लिकेशन पर क्या असर पड़ता है, इस बारे में जानने के लिए कॉन्फ़िगरेशन में हुए बदलावों को मैनेज करना लेख पढ़ें. कॉन्फ़िगरेशन फ़ील्ड |
टेक्स्ट डालने का मुख्य तरीका |
|
|
नेविगेशन की उपलब्धता |
|
अगर उपयोगकर्ता नेविगेशन बटन दिखाता है, तो ऐप्लिकेशन के चालू रहने के दौरान यह सेटिंग बदल सकती है. इसकी वजह से, रनटाइम के दौरान आपके ऐप्लिकेशन पर क्या असर पड़ता है, इस बारे में जानने के लिए कॉन्फ़िगरेशन में हुए बदलावों को मैनेज करना लेख पढ़ें.
|
बिना टच किए नेविगेट करने का मुख्य तरीका |
|
|
प्लैटफ़ॉर्म वर्शन (एपीआई लेवल) |
उदाहरण:
वगैरह |
डिवाइस पर काम करने वाला एपीआई लेवल. उदाहरण के लिए, |
क्वालिफ़ायर के नाम से जुड़े नियम
कॉन्फ़िगरेशन क्वालिफ़ायर के नामों का इस्तेमाल करने के बारे में कुछ नियम यहां दिए गए हैं:
- संसाधनों के एक सेट के लिए, डैश का इस्तेमाल करके कई क्वालिफ़ायर तय किए जा सकते हैं. उदाहरण के लिए,
drawable-en-rUS-land, लैंडस्केप ओरिएंटेशन में अमेरिका-अंग्रेज़ी वाले डिवाइसों पर लागू होता है. - क्वालिफ़ायर, टेबल 2 में दिए गए क्रम में होने चाहिए.
- गलत:
drawable-hdpi-port/ - सही:
drawable-port-hdpi/
- गलत:
- वैकल्पिक संसाधन डायरेक्ट्री को नेस्ट नहीं किया जा सकता. उदाहरण के लिए,
res/drawable/drawable-en/का इस्तेमाल नहीं किया जा सकता. - वैल्यू, केस-इनसेंसिटिव होती हैं. संसाधन कंपाइलर, डायरेक्ट्री के नामों को प्रोसेस करने से पहले उन्हें छोटे अक्षरों में बदल देता है. इससे केस-इनसेंसिटिव फ़ाइल सिस्टम में समस्याएं नहीं आती हैं. नामों में कैपिटल लेटर का इस्तेमाल सिर्फ़ इसलिए किया गया है, ताकि उन्हें आसानी से पढ़ा जा सके.
- हर क्वालिफ़ायर टाइप के लिए, सिर्फ़ एक वैल्यू इस्तेमाल की जा सकती है. उदाहरण के लिए, अगर आपको स्पेन और फ़्रांस के लिए एक ही ड्रॉएबल फ़ाइलों का इस्तेमाल करना है, तो आपके पास
drawable-es-fr/नाम की कोई डायरेक्ट्री नहीं होनी चाहिए. इसके बजाय, आपको दो रिसॉर्स डायरेक्ट्री की ज़रूरत होती है. जैसे,drawable-es/औरdrawable-fr/. इनमें सही फ़ाइलें मौजूद होती हैं. हालांकि, आपको दोनों जगहों पर फ़ाइलों को डुप्लीकेट करने की ज़रूरत नहीं है. इसके बजाय, एलियास संसाधन बनाएं सेक्शन में बताए गए तरीके से, किसी संसाधन के लिए एलियास बनाया जा सकता है.
इन क्वालिफ़ायर के नाम वाली डायरेक्ट्री में वैकल्पिक संसाधन सेव करने के बाद, Android आपके ऐप्लिकेशन में संसाधनों को अपने-आप लागू करता है. ऐसा मौजूदा डिवाइस कॉन्फ़िगरेशन के आधार पर किया जाता है. जब भी किसी संसाधन का अनुरोध किया जाता है, तो Android, अनुरोध की गई संसाधन फ़ाइल वाली वैकल्पिक संसाधन डायरेक्ट्री की जांच करता है. इसके बाद, सबसे मिलते-जुलते संसाधन का पता लगाता है.
अगर किसी डिवाइस कॉन्फ़िगरेशन से मेल खाने वाले कोई अन्य संसाधन नहीं हैं, तो Android उससे जुड़े डिफ़ॉल्ट संसाधनों का इस्तेमाल करता है. ये संसाधन, किसी संसाधन टाइप के लिए संसाधनों का ऐसा सेट होता है जिसमें कॉन्फ़िगरेशन क्वालिफ़ायर शामिल नहीं होता.
उपनाम वाले संसाधन बनाना
अगर आपको किसी ऐसे संसाधन का इस्तेमाल एक से ज़्यादा डिवाइस कॉन्फ़िगरेशन के लिए करना है जिसे डिफ़ॉल्ट संसाधन के तौर पर उपलब्ध नहीं कराना है, तो आपको उस संसाधन को एक से ज़्यादा वैकल्पिक संसाधन डायरेक्ट्री में रखने की ज़रूरत नहीं है. इसके बजाय, कोई ऐसा वैकल्पिक संसाधन बनाया जा सकता है जो आपकी डिफ़ॉल्ट संसाधन डायरेक्ट्री में सेव किए गए संसाधन के लिए एलियास के तौर पर काम करे.
उदाहरण के लिए, मान लें कि आपके पास एक ऐप्लिकेशन आइकॉन, icon.png है और आपको अलग-अलग स्थान-भाषाओं के लिए इसका यूनीक वर्शन चाहिए. हालांकि, अंग्रेज़ी-कैनडियन और फ़्रेंच-कैनडियन, दोनों भाषाओं के लिए एक ही वर्शन का इस्तेमाल करना ज़रूरी है. आपको अंग्रेज़ी-कनाडा और फ़्रेंच-कनाडा, दोनों के लिए एक ही इमेज को संसाधन डायरेक्ट्री में कॉपी करने की ज़रूरत नहीं है.
इसके बजाय, दोनों के लिए इस्तेमाल की गई इमेज को icon.png के अलावा किसी भी नाम से सेव किया जा सकता है. जैसे, icon_ca.png. इसके बाद, इसे डिफ़ॉल्ट res/drawable/ डायरेक्ट्री में रखा जा सकता है. इसके बाद, res/drawable-en-rCA/ में icon.xml फ़ाइल बनाएं और res/drawable-fr-rCA/ में <bitmap> एलिमेंट का इस्तेमाल करके, icon_ca.png संसाधन को रेफ़र करें. इससे, PNG फ़ाइल का सिर्फ़ एक वर्शन और दो छोटी एक्सएमएल फ़ाइलें सेव की जा सकती हैं. ये फ़ाइलें, PNG फ़ाइल की ओर ले जाती हैं. ज़्यादा जानकारी के लिए, यहां दिए गए उदाहरण देखें.
ड्रॉ किया जा सकने वाला
किसी मौजूदा ड्रॉएबल का एलियास बनाने के लिए, <drawable> एलिमेंट का इस्तेमाल करें:
<?xml version="1.0" encoding="utf-8"?>
<resources>
<drawable name="icon">@drawable/icon_ca</drawable>
</resources>
अगर इस फ़ाइल को किसी अन्य संसाधन डायरेक्ट्री, जैसे कि res/values-en-rCA/ में icon.xml के तौर पर सेव किया जाता है, तो इसे ऐसे संसाधन में कंपाइल किया जाता है जिसे R.drawable.icon के तौर पर रेफ़रंस किया जा सकता है. हालांकि, यह असल में R.drawable.icon_ca संसाधन का एलियास होता है, जिसे res/drawable/ में सेव किया जाता है.
लेआउट
किसी मौजूदा लेआउट का एलियास बनाने के लिए, <include> एलिमेंट का इस्तेमाल करें. इसे <merge> में रैप किया जाता है:
<?xml version="1.0" encoding="utf-8"?>
<merge>
<include layout="@layout/main_ltr"/>
</merge>
अगर इस फ़ाइल को main.xml के तौर पर सेव किया जाता है, तो इसे एक ऐसे रिसोर्स में कंपाइल किया जाता है जिसे R.layout.main के तौर पर रेफ़रंस किया जा सकता है. हालांकि, यह असल में R.layout.main_ltr रिसोर्स का एलियास होता है.
अपने ऐप्लिकेशन के संसाधनों को ऐक्सेस करना
अपने ऐप्लिकेशन में कोई संसाधन उपलब्ध कराने के बाद, उसके संसाधन आईडी का रेफ़रंस देकर उसे लागू किया जा सकता है. सभी संसाधन आईडी, आपके प्रोजेक्ट की R क्लास में तय किए जाते हैं. aapt टूल, इन्हें अपने-आप जनरेट करता है.
जब आपका ऐप्लिकेशन कंपाइल किया जाता है, तब aapt, R क्लास जनरेट करता है. इसमें आपकी res/ डायरेक्ट्री में मौजूद सभी रिसॉर्स के रिसॉर्स आईडी होते हैं. हर तरह के रिसॉर्स के लिए, एक R सबक्लास होता है. जैसे, सभी ड्रॉ किए जा सकने वाले रिसॉर्स के लिए R.drawable. साथ ही, उस टाइप के हर संसाधन के लिए एक स्टैटिक पूर्णांक होता है. उदाहरण के लिए, R.drawable.icon. यह पूर्णांक, रिसॉर्स आईडी है. इसका इस्तेमाल करके, अपने रिसॉर्स को वापस पाया जा सकता है.
हालांकि, R क्लास में संसाधन आईडी तय किए जाते हैं, लेकिन संसाधन आईडी ढूंढने के लिए आपको वहां देखने की ज़रूरत नहीं है. किसी रिसॉर्स आईडी में हमेशा ये शामिल होते हैं:
- संसाधन का टाइप: हर संसाधन को "टाइप" के हिसाब से ग्रुप किया जाता है. जैसे,
string, drawableऔरlayout. अलग-अलग टाइप के बारे में ज़्यादा जानने के लिए, संसाधन टाइप की खास जानकारी देखें. - संसाधन का नाम. यह एक्सटेंशन के बिना फ़ाइल का नाम होता है. अगर संसाधन कोई सामान्य वैल्यू है, जैसे कि स्ट्रिंग, तो यह XML
android:nameएट्रिब्यूट की वैल्यू होती है.
किसी संसाधन को ऐक्सेस करने के दो तरीके हैं:
- कोड में: अपनी
Rक्लास की सबक्लास से स्टैटिक पूर्णांक का इस्तेमाल करना. जैसे:R.string.hellostringरिसॉर्स टाइप है औरhelloरिसॉर्स का नाम है. ऐसे कई Android API हैं जो इस फ़ॉर्मैट में संसाधन आईडी देने पर, आपके संसाधनों को ऐक्सेस कर सकते हैं. ज़्यादा जानकारी के लिए, कोड में संसाधनों को ऐक्सेस करना सेक्शन देखें. - एक्सएमएल में: एक खास एक्सएमएल सिंटैक्स का इस्तेमाल करके, जो आपकी
Rक्लास में तय किए गए संसाधन आईडी से मेल खाता है. जैसे:@string/hellostringसंसाधन का टाइप है औरhelloसंसाधन का नाम है. इस सिंटैक्स का इस्तेमाल, एक्सएमएल रिसॉर्स में किसी भी ऐसी जगह पर किया जा सकता है जहां आपको रिसॉर्स में कोई वैल्यू देनी हो. ज़्यादा जानकारी के लिए, एक्सएमएल से संसाधन ऐक्सेस करना सेक्शन देखें.
कोड में मौजूद संसाधनों को ऐक्सेस करना
किसी संसाधन का इस्तेमाल कोड में किया जा सकता है. इसके लिए, संसाधन आईडी को तरीके के पैरामीटर के तौर पर पास करें.
उदाहरण के लिए, setImageResource का इस्तेमाल करके, res/drawable/myimage.png रिसोर्स का इस्तेमाल करने के लिए, ImageView सेट किया जा सकता है:
Kotlin
val imageView = findViewById(R.id.myimageview) as ImageView
imageView.setImageResource(R.drawable.myimage)
Java
ImageView imageView = (ImageView) findViewById(R.id.myimageview);
imageView.setImageResource(R.drawable.myimage);
Resources में दिए गए तरीकों का इस्तेमाल करके, अलग-अलग संसाधनों को भी वापस पाया जा सकता है. getResources का इस्तेमाल करके, इसका इंस्टेंस पाया जा सकता है.
सिंटैक्स
कोड में किसी संसाधन का रेफ़रंस देने का सिंटैक्स यहां दिया गया है:
[<package_name>.]R.<resource_type>.<resource_name>
<package_name>उस पैकेज का नाम है जिसमें संसाधन मौजूद है. अगर आपको अपने पैकेज के संसाधनों का रेफ़रंस देना है, तो इसकी ज़रूरत नहीं है.<resource_type>, रिसॉर्स टाइप के लिएRसबक्लास है.<resource_name>, एक्सटेंशन के बिना रिसॉर्स फ़ाइल का नाम होता है. इसके अलावा, यह सामान्य वैल्यू के लिए, एक्सएमएल एलिमेंट मेंandroid:nameएट्रिब्यूट की वैल्यू भी हो सकता है.
इस्तेमाल के उदाहरण
ऐसे कई तरीके हैं जो संसाधन आईडी पैरामीटर स्वीकार करते हैं. साथ ही, Resources में दिए गए तरीकों का इस्तेमाल करके संसाधनों को वापस पाया जा सकता है. Context.getResources का इस्तेमाल करके, Resources का इंस्टेंस पाया जा सकता है.
कोड में संसाधनों को ऐक्सेस करने के कुछ उदाहरण यहां दिए गए हैं:
Kotlin
// Load a background for the current screen from a drawable resource.
window.setBackgroundDrawableResource(R.drawable.my_background_image)
// Set the Activity title by getting a string from the Resources object, because
// this method requires a CharSequence rather than a resource ID.
window.setTitle(resources.getText(R.string.main_title))
// Load a custom layout for the current screen.
setContentView(R.layout.main_screen)
// Set a slide in animation by getting an Animation from the Resources object.
flipper.setInAnimation(AnimationUtils.loadAnimation(this,
R.anim.hyperspace_in))
// Set the text on a TextView object using a resource ID.
val msgTextView = findViewById(R.id.msg) as TextView
msgTextView.setText(R.string.hello_message)
Java
// Load a background for the current screen from a drawable resource.
getWindow().setBackgroundDrawableResource(R.drawable.my_background_image) ;
// Set the Activity title by getting a string from the Resources object, because
// this method requires a CharSequence rather than a resource ID.
getWindow().setTitle(getResources().getText(R.string.main_title));
// Load a custom layout for the current screen.
setContentView(R.layout.main_screen);
// Set a slide in animation by getting an Animation from the Resources object.
flipper.setInAnimation(AnimationUtils.loadAnimation(this,
R.anim.hyperspace_in));
// Set the text on a TextView object using a resource ID.
TextView msgTextView = (TextView) findViewById(R.id.msg);
msgTextView.setText(R.string.hello_message);
एक्सएमएल से संसाधनों को ऐक्सेस करना
मौजूदा संसाधन का रेफ़रंस देकर, कुछ एक्सएमएल एट्रिब्यूट और एलिमेंट के लिए वैल्यू तय की जा सकती हैं. लेआउट फ़ाइलें बनाते समय, अक्सर ऐसा किया जाता है. इससे आपको अपने विजेट के लिए स्ट्रिंग और इमेज उपलब्ध कराने में मदद मिलती है.
उदाहरण के लिए, अगर आपने अपने लेआउट में Button जोड़ा है, तो बटन के टेक्स्ट के लिए स्ट्रिंग
संसाधन का इस्तेमाल करें:
<Button
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="@string/submit" />
सिंटैक्स
एक्सएमएल रिसॉर्स में किसी रिसॉर्स को रेफ़रंस करने का सिंटैक्स यहां दिया गया है:
@[<package_name>:]<resource_type>/<resource_name>
<package_name>उस पैकेज का नाम है जिसमें रिसॉर्स मौजूद है. हालांकि, एक ही पैकेज के रिसॉर्स का रेफ़रंस देते समय इसकी ज़रूरत नहीं होती.<resource_type>, रिसॉर्स टाइप के लिएRसबक्लास है.<resource_name>, एक्सटेंशन के बिना रिसॉर्स फ़ाइल का नाम होता है. इसके अलावा, यह सामान्य वैल्यू के लिए, एक्सएमएल एलिमेंट मेंandroid:nameएट्रिब्यूट की वैल्यू भी हो सकता है.
इस्तेमाल के उदाहरण
कुछ मामलों में, आपको एक्सएमएल में किसी वैल्यू के लिए रिसॉर्स का इस्तेमाल करना होगा. जैसे, किसी विजेट पर ड्रॉएबल इमेज लागू करने के लिए. हालांकि, एक्सएमएल में किसी भी ऐसी जगह पर रिसॉर्स का इस्तेमाल किया जा सकता है जहां सामान्य वैल्यू स्वीकार की जाती है. उदाहरण के लिए, अगर आपके पास यह संसाधन फ़ाइल है, जिसमें कलर रिसॉर्स और स्ट्रिंग रिसॉर्स शामिल है:
<?xml version="1.0" encoding="utf-8"?>
<resources>
<color name="opaque_red">#f00</color>
<string name="hello">Hello!</string>
</resources>
टेक्स्ट का रंग और टेक्स्ट स्ट्रिंग सेट करने के लिए, इन संसाधनों का इस्तेमाल इस लेआउट फ़ाइल में किया जा सकता है:
<?xml version="1.0" encoding="utf-8"?>
<EditText xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:textColor="@color/opaque_red"
android:text="@string/hello" />
इस मामले में, आपको रिसॉर्स रेफ़रंस में पैकेज का नाम बताने की ज़रूरत नहीं है, क्योंकि रिसॉर्स आपके पैकेज से हैं. किसी सिस्टम रिसोर्स का रेफ़रंस देने के लिए, आपको पैकेज का नाम शामिल करना होगा. उदाहरण के लिए:
<?xml version="1.0" encoding="utf-8"?>
<EditText xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:textColor="@android:color/secondary_text_dark"
android:text="@string/hello" />
उपनाम बनाने के लिए, एक्सएमएल में मौजूद संसाधनों का भी इस्तेमाल किया जा सकता है. उदाहरण के लिए, एक ऐसा ड्रॉअबल संसाधन बनाया जा सकता है जो किसी दूसरे ड्रॉअबल संसाधन का एलियास हो:
<?xml version="1.0" encoding="utf-8"?>
<bitmap xmlns:android="http://schemas.android.com/apk/res/android"
android:src="@drawable/other_drawable" />
यह जानकारी दोहराई गई लगती है, लेकिन किसी दूसरे संसाधन का इस्तेमाल करते समय यह बहुत काम आ सकती है. ज़्यादा जानकारी के लिए, एलियास संसाधन बनाने के बारे में सेक्शन देखें.
रेफ़रंस स्टाइल एट्रिब्यूट
स्टाइल एट्रिब्यूट रिसॉर्स की मदद से, फ़िलहाल लागू की गई थीम में किसी एट्रिब्यूट की वैल्यू का रेफ़रंस दिया जा सकता है. स्टाइल एट्रिब्यूट का रेफ़रंस देने से, यूज़र इंटरफ़ेस (यूआई) एलिमेंट के लुक को पसंद के मुताबिक बनाया जा सकता है. इसके लिए, उन्हें स्टाइल किया जाता है, ताकि वे मौजूदा थीम के स्टैंडर्ड वेरिएशन से मेल खाएं. इसके बजाय, हार्डकोड की गई वैल्यू दी जाती है. स्टाइल एट्रिब्यूट का रेफ़रंस देने का मतलब है, "मौजूदा थीम में इस एट्रिब्यूट से तय की गई स्टाइल का इस्तेमाल करें."
स्टाइल एट्रिब्यूट का रिफ़रंस देने के लिए, नाम का सिंटैक्स सामान्य रिसॉर्स फ़ॉर्मैट के जैसा ही होता है. हालांकि, "ऐट" सिंबल (@) के बजाय, प्रश्न चिह्न (?) का इस्तेमाल करें. रिसॉर्स टाइप वाला हिस्सा ज़रूरी नहीं है. इसलिए, रेफ़रंस का सिंटैक्स इस तरह है:
?[<package_name>:][<resource_type>/]<resource_name>
उदाहरण के लिए, यहां बताया गया है कि सिस्टम थीम के सेकंडरी टेक्स्ट के रंग से मेल खाने के लिए, टेक्स्ट का रंग सेट करने के लिए किसी एट्रिब्यूट को कैसे रेफ़रंस किया जा सकता है:
<EditText id="text"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:textColor="?android:textColorSecondary"
android:text="@string/hello_world" />
यहां, android:textColor एट्रिब्यूट, मौजूदा थीम में स्टाइल एट्रिब्यूट का नाम बताता है. Android अब इस विजेट में, android:textColorSecondary स्टाइल एट्रिब्यूट पर लागू की गई वैल्यू का इस्तेमाल, android:textColor की वैल्यू के तौर पर करता है. सिस्टम रिसॉर्स टूल को पता है कि इस कॉन्टेक्स्ट में एट्रिब्यूट रिसॉर्स की ज़रूरत है. इसलिए, आपको टाइप के बारे में साफ़ तौर पर बताने की ज़रूरत नहीं है. टाइप ?android:attr/textColorSecondary है. attr टाइप को बाहर रखा जा सकता है.
ओरिजनल फ़ाइलें ऐक्सेस करना
हालांकि, ऐसा कम ही होता है, लेकिन आपको अपनी मूल फ़ाइलों और डायरेक्ट्री को ऐक्सेस करने की ज़रूरत पड़ सकती है. अगर ऐसा है, तो res/ में फ़ाइलें सेव करने की सुविधा आपके लिए काम नहीं करेगी. ऐसा इसलिए, क्योंकि res/ से किसी संसाधन को सिर्फ़ संसाधन आईडी की मदद से पढ़ा जा सकता है. इसके बजाय, अपने संसाधनों को assets/ डायरेक्ट्री में सेव किया जा सकता है.
assets/ डायरेक्ट्री में सेव की गई फ़ाइलों को रिसॉर्स आईडी नहीं दिया जाता है. इसलिए, R क्लास या एक्सएमएल रिसॉर्स से उनका रेफ़रंस नहीं दिया जा सकता. इसके बजाय, assets/ डायरेक्ट्री में मौजूद फ़ाइलों को सामान्य फ़ाइल सिस्टम की तरह क्वेरी किया जा सकता है. साथ ही, AssetManager का इस्तेमाल करके रॉ डेटा पढ़ा जा सकता है.
हालांकि, अगर आपको सिर्फ़ रॉ डेटा (जैसे कि वीडियो या ऑडियो फ़ाइल) को पढ़ने की सुविधा चाहिए, तो फ़ाइल को res/raw/ डायरेक्ट्री में सेव करें. इसके बाद, openRawResource का इस्तेमाल करके, बाइट की स्ट्रीम पढ़ें.
प्लैटफ़ॉर्म के संसाधनों को ऐक्सेस करना
Android में कई स्टैंडर्ड संसाधन होते हैं, जैसे कि स्टाइल, थीम, और लेआउट. इन संसाधनों को ऐक्सेस करने के लिए, अपने संसाधन के रेफ़रंस को android पैकेज के नाम के साथ जोड़ें. उदाहरण के लिए, Android एक लेआउट रिसॉर्स उपलब्ध कराता है. इसका इस्तेमाल, ListAdapter में मौजूद सूची आइटम के लिए किया जा सकता है:
Kotlin
listAdapter = ArrayAdapter(this, android.R.layout.simple_list_item_1, myarray)
Java
setListAdapter(new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, myarray));
इस उदाहरण में, simple_list_item_1 एक लेआउट संसाधन है. इसे प्लैटफ़ॉर्म ने ListView में मौजूद आइटम के लिए तय किया है. सूची में शामिल आइटम के लिए, खुद का लेआउट बनाने के बजाय इसका इस्तेमाल किया जा सकता है.
संसाधनों के साथ डिवाइस की सबसे अच्छी कंपैटिबिलिटी उपलब्ध कराना
आपके ऐप्लिकेशन को कई डिवाइस कॉन्फ़िगरेशन के साथ काम करने के लिए, यह बहुत ज़रूरी है कि आप अपने ऐप्लिकेशन में इस्तेमाल होने वाले हर तरह के संसाधन के लिए, हमेशा डिफ़ॉल्ट संसाधन उपलब्ध कराएं.
उदाहरण के लिए, अगर आपका ऐप्लिकेशन कई भाषाओं में काम करता है, तो हमेशा एक ऐसी values/डायरेक्ट्री शामिल करें जिसमें आपकी स्ट्रिंग सेव की गई हों. इसमें भाषा और देश/इलाके के हिसाब से तय किए गए क्वालिफ़ायर नहीं होने चाहिए. अगर आपने अपनी सभी स्ट्रिंग फ़ाइलों को ऐसी डायरेक्ट्री में रखा है जिनमें भाषा और देश/इलाके के हिसाब से क्वालिफ़ायर मौजूद है, तो आपके ऐप्लिकेशन को ऐसी भाषा में सेट किए गए डिवाइस पर चलाने पर वह क्रैश हो जाएगा जिसमें आपकी स्ट्रिंग काम नहीं करती हैं.
डिफ़ॉल्ट values/ संसाधन उपलब्ध कराने पर, आपका ऐप्लिकेशन ठीक से काम करता है. भले ही, उपयोगकर्ता को ऐप्लिकेशन में इस्तेमाल की गई भाषा समझ न आए. यह क्रैश होने से बेहतर है.
इसी तरह, अगर स्क्रीन ओरिएंटेशन के आधार पर अलग-अलग लेआउट संसाधन उपलब्ध कराए जाते हैं, तो किसी एक ओरिएंटेशन को डिफ़ॉल्ट के तौर पर चुनें. उदाहरण के लिए, लैंडस्केप के लिए layout-land/ और पोर्ट्रेट के लिए layout-port/ में लेआउट संसाधन उपलब्ध कराने के बजाय, किसी एक को डिफ़ॉल्ट के तौर पर छोड़ दें. जैसे, लैंडस्केप के लिए layout/ और पोर्ट्रेट के लिए layout-port/.
डिफ़ॉल्ट संसाधन उपलब्ध कराना ज़रूरी है. ऐसा इसलिए, क्योंकि हो सकता है कि आपका ऐप्लिकेशन ऐसे कॉन्फ़िगरेशन पर काम करे जिसके बारे में आपने सोचा न हो. इसके अलावा, Android के नए वर्शन में कभी-कभी ऐसे कॉन्फ़िगरेशन क्वालिफ़ायर जोड़े जाते हैं जो पुराने वर्शन पर काम नहीं करते. अगर आपने नए रिसॉर्स क्वालिफ़ायर का इस्तेमाल किया है, लेकिन Android के पुराने वर्शन के साथ कोड की कंपैटिबिलिटी बनाए रखी है, तो Android के पुराने वर्शन पर आपका ऐप्लिकेशन चलने पर क्रैश हो जाएगा. ऐसा तब होगा, जब आपने डिफ़ॉल्ट रिसॉर्स उपलब्ध नहीं कराए होंगे. इसकी वजह यह है कि Android का पुराना वर्शन, नए क्वालिफ़ायर के नाम वाले रिसॉर्स का इस्तेमाल नहीं कर सकता.
उदाहरण के लिए, अगर आपका minSdkVersion 4 पर सेट है और आपने नाइट मोड (night या notnight, जिन्हें एपीआई लेवल 8 में जोड़ा गया था) का इस्तेमाल करके, अपने सभी ड्रॉएबल संसाधनों को क्वालिफ़ाई किया है, तो एपीआई लेवल 4 वाला डिवाइस आपके ड्रॉएबल संसाधनों को ऐक्सेस नहीं कर सकता और क्रैश हो जाता है. इस मामले में, शायद आपको notnight को अपने डिफ़ॉल्ट संसाधनों के तौर पर इस्तेमाल करना हो. इसलिए, उस क्वालिफ़ायर को बाहर रखें और अपने ड्रॉएबल संसाधनों को drawable/ या drawable-night/ में से किसी एक में रखें.
संक्षेप में, डिवाइस के साथ बेहतर तरीके से काम करने के लिए, हमेशा उन संसाधनों के लिए डिफ़ॉल्ट संसाधन उपलब्ध कराएं जिनकी ज़रूरत आपके ऐप्लिकेशन को सही तरीके से काम करने के लिए होती है. इसके बाद, कॉन्फ़िगरेशन क्वालिफ़ायर का इस्तेमाल करके, डिवाइस के खास कॉन्फ़िगरेशन के लिए वैकल्पिक संसाधन बनाएं.
इस नियम का एक अपवाद है: अगर आपके ऐप्लिकेशन का minSdkVersion 4 या इससे ज़्यादा है, तो स्क्रीन डेंसिटी क्वालिफ़ायर के साथ वैकल्पिक ड्रॉअबल संसाधन उपलब्ध कराने पर, आपको डिफ़ॉल्ट ड्रॉअबल संसाधनों की ज़रूरत नहीं होती. डिफ़ॉल्ट ड्रॉएबल रिसॉर्स के बिना भी, Android अलग-अलग स्क्रीन डेंसिटी के हिसाब से सबसे सही इमेज ढूंढ सकता है. साथ ही, ज़रूरत के हिसाब से बिटमैप को स्केल कर सकता है. हालांकि, सभी तरह के डिवाइसों पर बेहतर अनुभव पाने के लिए, तीनों तरह की डेंसिटी के लिए वैकल्पिक ड्रॉएबल उपलब्ध कराएं.