ऐप्लिकेशन के रिसॉर्स की खास जानकारी (व्यू)

सिद्धांत और 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/ डायरेक्ट्री में, इन संसाधन डायरेक्ट्री का इस्तेमाल किया जा सकता है.

डायरेक्ट्री

संसाधन का टाइप

animator/

प्रॉपर्टी ऐनिमेशन तय करने वाली एक्सएमएल फ़ाइलें.

anim/

एक्सएमएल फ़ाइलें, जो ट्वीन ऐनिमेशन तय करती हैं. प्रॉपर्टी के ऐनिमेशन भी इस डायरेक्ट्री में सेव किए जा सकते हैं. हालांकि, प्रॉपर्टी के ऐनिमेशन के लिए animator/ डायरेक्ट्री का इस्तेमाल करने का सुझाव दिया जाता है, ताकि दोनों टाइप के बीच अंतर किया जा सके.

color/

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

drawable/

बिटमैप फ़ाइलें (PNG, .9.png, JPG या GIF) या XML फ़ाइलें, जिन्हें ड्रॉएबल रिसॉर्स के इन सबटाइप में कंपाइल किया जाता है:

  • बिटमैप फ़ाइलें
  • नौ पैच (रीसाइज़ किए जा सकने वाले बिटमैप)
  • राज्य के हिसाब से सूचियां
  • आकार
  • ऐनिमेशन वाले ड्रॉअबल
  • अन्य ड्रॉएबल

ज़्यादा जानकारी के लिए, ड्रॉएबल रिसॉर्स देखें.

mipmap/

अलग-अलग लॉन्चर आइकॉन डेंसिटी के लिए ड्रॉएबल फ़ाइलें. mipmap/ फ़ोल्डर की मदद से लॉन्चर आइकॉन मैनेज करने के बारे में ज़्यादा जानने के लिए, ऐप्लिकेशन आइकॉन को मिपमैप डायरेक्ट्री में रखना लेख पढ़ें.

layout/

एक्सएमएल फ़ाइलें, जो यूज़र इंटरफ़ेस लेआउट तय करती हैं. ज़्यादा जानकारी के लिए, लेआउट संसाधन देखें.

menu/

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

raw/

फ़ाइलों को उनके रॉ फ़ॉर्म में सेव करने के लिए. इन संसाधनों को रॉ InputStream के साथ खोलने के लिए, संसाधन आईडी के साथ Resources.openRawResource को कॉल करें. संसाधन आईडी R.raw.filename है.

हालांकि, अगर आपको ओरिजनल फ़ाइल के नाम और फ़ाइल के क्रम को ऐक्सेस करना है, तो assets/ डायरेक्ट्री के बजाय assets/ डायरेक्ट्री में रिसॉर्स सेव करें.res/raw/ assets/ में मौजूद फ़ाइलों को संसाधन आईडी नहीं दिया जाता. इसलिए, उन्हें सिर्फ़ AssetManager का इस्तेमाल करके पढ़ा जा सकता है.

values/

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

वहीं, अन्य res/ सबडायरेक्ट्री में मौजूद एक्सएमएल रिसॉर्स फ़ाइलें, एक्सएमएल फ़ाइल के नाम के आधार पर एक रिसॉर्स तय करती हैं. हालांकि, values/ डायरेक्ट्री में मौजूद फ़ाइलें, एक से ज़्यादा रिसॉर्स के बारे में बताती हैं. इस डायरेक्ट्री में मौजूद किसी फ़ाइल के लिए, एलिमेंट का हर चाइल्ड, एक संसाधन के बारे में बताता है. उदाहरण के लिए, एलिमेंट से R.string संसाधन बनता है और एलिमेंट से R.color संसाधन बनता है.

हर संसाधन को उसके अपने एक्सएमएल एलिमेंट के साथ तय किया जाता है. इसलिए, फ़ाइल का नाम अपनी पसंद के हिसाब से रखा जा सकता है. साथ ही, एक ही फ़ाइल में अलग-अलग तरह के संसाधन रखे जा सकते हैं. हालांकि, बेहतर तरीके से समझने के लिए, अलग-अलग फ़ाइलों में यूनीक रिसॉर्स टाइप रखे जा सकते हैं. उदाहरण के लिए, इस डायरेक्ट्री में बनाए जा सकने वाले संसाधनों के लिए, फ़ाइल के नाम रखने के कुछ नियम यहां दिए गए हैं:

ज़्यादा जानकारी के लिए, स्ट्रिंग रिसॉर्स, स्टाइल रिसॉर्स, और अन्य रिसॉर्स टाइप देखें.

xml/

कोई भी एक्सएमएल फ़ाइल, जिसे रनटाइम के दौरान Resources.getXML() को कॉल करके पढ़ा जा सकता है. अलग-अलग एक्सएमएल कॉन्फ़िगरेशन फ़ाइलों को यहां सेव किया जाना चाहिए.

font/

TTF, OTF या TTC जैसे एक्सटेंशन वाली फ़ॉन्ट फ़ाइलें या ऐसी एक्सएमएल फ़ाइलें जिनमें एलिमेंट शामिल हो. फ़ॉन्ट को संसाधन के तौर पर इस्तेमाल करने के बारे में ज़्यादा जानने के लिए, एक्सएमएल संसाधन के तौर पर फ़ॉन्ट जोड़ना लेख पढ़ें.

टेबल 1 में बताई गई सबडायरेक्ट्री में सेव किए गए रिसॉर्स, आपके डिफ़ॉल्ट रिसॉर्स होते हैं. इसका मतलब है कि ये संसाधन, आपके ऐप्लिकेशन के लिए डिफ़ॉल्ट डिज़ाइन और कॉन्टेंट तय करते हैं. हालांकि, Android पर काम करने वाले अलग-अलग डिवाइसों के लिए, अलग-अलग तरह के संसाधनों की ज़रूरत पड़ सकती है.

उदाहरण के लिए, सामान्य से बड़ी स्क्रीन वाले डिवाइसों के लिए, अलग-अलग लेआउट संसाधन दिए जा सकते हैं. इससे स्क्रीन पर ज़्यादा जगह का फ़ायदा लिया जा सकता है. डिवाइस की भाषा की सेटिंग के आधार पर, अपने उपयोगकर्ता इंटरफ़ेस में टेक्स्ट का अनुवाद करने वाली अलग-अलग स्ट्रिंग रिसॉर्स भी उपलब्ध कराए जा सकते हैं. अलग-अलग डिवाइस कॉन्फ़िगरेशन के लिए, ये अलग-अलग संसाधन उपलब्ध कराने के लिए, आपको डिफ़ॉल्ट संसाधनों के अलावा, अन्य संसाधन भी उपलब्ध कराने होंगे.

वैकल्पिक रिसॉर्स उपलब्ध कराना

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

इमेज 1. स्क्रीन के साइज़ के आधार पर, लेआउट के अलग-अलग संसाधनों का इस्तेमाल करने वाले दो डिवाइस.

संसाधनों के किसी सेट के लिए, कॉन्फ़िगरेशन के हिसाब से विकल्प तय करने के लिए, यह तरीका अपनाएं:

  1. res/ में, <resources_name>-<qualifier> नाम की एक नई डायरेक्ट्री बनाएं.

    • <resources_name>, टेबल 1 में दिए गए डिफ़ॉल्ट संसाधनों का डायरेक्ट्री नाम है.
    • <qualifier> एक ऐसा नाम है जो किसी कॉन्फ़िगरेशन के बारे में बताता है. इस कॉन्फ़िगरेशन के लिए, इन संसाधनों का इस्तेमाल किया जाना है. इसे टेबल 2 में बताया गया है.

    एक से ज़्यादा <qualifier> जोड़े जा सकते हैं. हर एक को डैश से अलग करें.

  2. इस नई डायरेक्ट्री में, सही वैकल्पिक संसाधन सेव करें. संसाधन फ़ाइलों के नाम, डिफ़ॉल्ट संसाधन फ़ाइलों के नाम से पूरी तरह मेल खाने चाहिए.

उदाहरण के लिए, यहां कुछ डिफ़ॉल्ट और वैकल्पिक संसाधन दिए गए हैं:

res/
    drawable/
        icon.png
        background.png
    drawable-hdpi/
        icon.png
        background.png

hdpi क्वालिफ़ायर से पता चलता है कि उस डायरेक्ट्री में मौजूद संसाधन, ज़्यादा डेनसिटी वाली स्क्रीन वाले डिवाइसों के लिए हैं. इन ड्रॉएबल डायरेक्ट्री में मौजूद इमेज, स्क्रीन की खास डेंसिटी के हिसाब से साइज़ की गई हैं. हालांकि, फ़ाइलों के नाम एक जैसे हैं. इस तरह, icon.png या background.png इमेज का रेफ़रंस देने के लिए इस्तेमाल किया गया रिसॉर्स आईडी हमेशा एक ही रहता है. Android, हर संसाधन के उस वर्शन को चुनता है जो मौजूदा डिवाइस के साथ सबसे अच्छी तरह से काम करता है. इसके लिए, वह डिवाइस के कॉन्फ़िगरेशन की जानकारी की तुलना, संसाधन डायरेक्ट्री के नाम में मौजूद क्वालिफ़ायर से करता है.

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

टेबल 2. कॉन्फ़िगरेशन क्वालिफ़ायर के नाम.

कॉन्फ़िगरेशन

क्वालिफ़ायर वैल्यू

ब्यौरा

एमसीसी और एमएनसी

उदाहरण:

mcc310

mcc310-mnc004

mcc208-mnc00

मोबाइल कंट्री कोड (एमसीसी). इसके बाद, डिवाइस में मौजूद सिम कार्ड से मिला मोबाइल नेटवर्क कोड (एमएनसी) भी शामिल किया जा सकता है. उदाहरण के लिए, mcc310 अमेरिका में किसी भी कैरियर के लिए, mcc310-mnc004 अमेरिका में Verizon के लिए, और mcc208-mnc00 फ़्रांस में Orange के लिए है.

अगर डिवाइस रेडियो कनेक्शन का इस्तेमाल करता है (यानी कि यह जीएसएम फ़ोन है), तो एमसीसी और एमएनसी की वैल्यू, सिम कार्ड से मिलती हैं.

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

कॉन्फ़िगरेशन फ़ील्ड mcc और mnc भी देखें. इनसे, मोबाइल के मौजूदा देश के कोड और मोबाइल नेटवर्क के कोड के बारे में पता चलता है.

भाषा, स्क्रिप्ट (ज़रूरी नहीं), और क्षेत्र (ज़रूरी नहीं)

उदाहरण:

en

fr

en-rUS

fr-rFR

fr-rCA

b+en

b+en+US

b+es+419

b+zh+Hant

b+sr+Latn+RS

भाषा को दो अक्षरों वाले ISO 639-2{:.external} भाषा कोड से तय किया जाता है. इसके बाद, दो अक्षरों वाला ISO 3166-1-alpha-2{:.external} क्षेत्र कोड (इससे पहले छोटे अक्षरों वाला r) दिया जा सकता है.

कोड, केस-सेंसिटिव (बड़े और छोटे अक्षरों में अंतर) नहीं होते हैं. r प्रीफ़िक्स का इस्तेमाल, क्षेत्र के हिस्से को अलग करने के लिए किया जाता है. सिर्फ़ क्षेत्र की जानकारी नहीं दी जा सकती.

Android 7.0 (एपीआई लेवल 24) में, BCP 47 भाषा टैग{:.external} के लिए सहायता शुरू की गई थी. इनका इस्तेमाल, भाषा और क्षेत्र के हिसाब से उपलब्ध संसाधनों को बेहतर बनाने के लिए किया जा सकता है. भाषा टैग, एक या उससे ज़्यादा सबटैग के क्रम से बना होता है. इनमें से हर सबटैग, पूरे टैग से पहचानी गई भाषा की रेंज को बेहतर बनाता है या कम करता है. भाषा के टैग के बारे में ज़्यादा जानकारी के लिए, भाषाओं की पहचान करने वाले टैग{:.external} देखें.

BCP 47 भाषा टैग का इस्तेमाल करने के लिए, b+ और दो अक्षरों वाले ISO 639-2{:.external} भाषा कोड को एक साथ जोड़ें. इसके बाद, + से अलग किए गए अतिरिक्त सबटैग जोड़े जा सकते हैं.

अगर उपयोगकर्ता सिस्टम की सेटिंग में जाकर भाषा बदलते हैं, तो आपके ऐप्लिकेशन के लिए भाषा का टैग बदल सकता है. इसकी वजह से, रनटाइम के दौरान आपके ऐप्लिकेशन पर क्या असर पड़ सकता है, इस बारे में जानने के लिए कॉन्फ़िगरेशन में हुए बदलावों को मैनेज करना लेख पढ़ें.

अपने ऐप्लिकेशन को अन्य भाषाओं के लिए स्थानीय भाषा के मुताबिक बनाने के बारे में पूरी जानकारी पाने के लिए, अपने ऐप्लिकेशन को स्थानीय भाषा के मुताबिक बनाएं लेख पढ़ें.

getLocales तरीका भी देखें. इससे, तय की गई भाषाओं की सूची मिलती है. इस सूची में मुख्य स्थान-भाषा शामिल है.

व्याकरण के हिसाब से लिंग masculine
feminine
neuter

उपयोगकर्ता का व्याकरण के हिसाब से लिंग. इसका इस्तेमाल उन भाषाओं के लिए किया जाता है जिनमें व्याकरण के हिसाब से लिंग होता है.

उदाहरण के लिए, अगर आपको फ़्रेंच बोलने वाले लोगों के लिए अलग-अलग संसाधन उपलब्ध कराने हैं, तो यहां दी गई डायरेक्ट्री का इस्तेमाल किया जा सकता है:

res/
  values-fr/
    strings.xml (डिफ़ॉल्ट स्ट्रिंग, जिनमें लिंग की जानकारी नहीं दी गई है)
  values-fr-masculine/
    strings.xml (पुरुषवाचक स्ट्रिंग)
  values-fr-feminine/
    strings.xml (स्त्रीवाचक स्ट्रिंग)
  values-fr-neuter/
    strings.xml (ऐसे शब्द जो पुरुष या महिला, दोनों के लिए इस्तेमाल किए जा सकते हैं)

Android में अपने हिसाब से जेंडर चुनना देखें.

getGrammaticalGender() कॉन्फ़िगरेशन का तरीका भी देखें. इससे व्याकरण के हिसाब से लिंग का पता चलता है.

इसे एपीआई लेवल 34 में जोड़ा गया है.

लेआउट की दिशा

ldrtl

ldltr

आपके ऐप्लिकेशन का लेआउट. ldrtl का मतलब है "layout-direction-right-to-left." ldltr का मतलब "layout-direction-left-to-right" है. यह डिफ़ॉल्ट वैल्यू है.

यह किसी भी संसाधन पर लागू हो सकता है. जैसे, लेआउट, ड्रॉएबल या वैल्यू.

उदाहरण के लिए, अगर आपको अरबी भाषा के लिए कोई खास लेआउट और फ़ारसी या हिब्रू जैसी किसी अन्य "दाईं से बाईं ओर" लिखी जाने वाली भाषा के लिए कोई सामान्य लेआउट देना है, तो यहां दी गई डायरेक्ट्री का इस्तेमाल करें:

res/
layout/
main.xml
(डिफ़ॉल्ट लेआउट)
layout-ar/
main.xml (अरबी भाषा के लिए खास लेआउट)
layout-ldrtl/
main.xml (अरबी के अलावा, दाईं से बाईं ओर लिखी जाने वाली कोई भी भाषा, क्योंकि "ar" भाषा क्वालिफ़ायर को ज़्यादा प्राथमिकता दी जाती है)

ध्यान दें: अपने ऐप्लिकेशन के लिए, दाईं से बाईं ओर लेआउट करने की सुविधाएँ चालू करने के लिए, आपको SupportsRtl को "true" पर सेट करना होगा. साथ ही, TargetSdkVersion को 17 या उससे ज़्यादा पर सेट करना होगा.

एपीआई लेवल 17 में जोड़ा गया.

सबसे कम चौड़ाई की स्क्रीन सेट करें

swdp

उदाहरण:

sw320dp

sw600dp

sw720dp

वगैरह

ऐप्लिकेशन के लिए उपलब्ध स्क्रीन एरिया का सबसे छोटा डाइमेंशन. खास तौर पर, ऐप्लिकेशन विंडो की smallestWidth, विंडो की उपलब्ध ऊंचाई और चौड़ाई में सबसे छोटी होती है. इसे विंडो की "कम से कम चौड़ाई" के तौर पर भी माना जा सकता है. इस क्वालिफ़ायर का इस्तेमाल किया जा सकता है, ताकि आपके ऐप्लिकेशन के यूज़र इंटरफ़ेस (यूआई) के लिए कम से कम डीपी की चौड़ाई उपलब्ध हो.

उदाहरण के लिए, अगर आपके लेआउट के लिए यह ज़रूरी है कि स्क्रीन एरिया का सबसे छोटा डाइमेंशन हमेशा कम से कम 600 डीपी हो, तो इस क्वालिफ़ायर का इस्तेमाल करके, res/layout-sw600dp/ डायरेक्ट्री में लेआउट रिसॉर्स बनाए जा सकते हैं. सिस्टम इन संसाधनों का इस्तेमाल सिर्फ़ तब करता है, जब उपलब्ध स्क्रीन का सबसे छोटा डाइमेंशन कम से कम 600 डीपी हो. इससे कोई फ़र्क़ नहीं पड़ता कि 600 डीपी वाली साइड, उपयोगकर्ता को दिखने वाली ऊंचाई है या चौड़ाई. अगर विंडो का साइज़ बदला जाता है, तो सबसे कम चौड़ाई बदल सकती है. इससे उपलब्ध चौड़ाई/ऊंचाई बदल जाती है या विंडो की जगह बदल जाती है. इससे सिस्टम इनसेट भी बदल सकते हैं.

स्क्रीन के सामान्य साइज़ का पता लगाने के लिए, सबसे कम चौड़ाई का इस्तेमाल करना फ़ायदेमंद होता है. ऐसा इसलिए, क्योंकि लेआउट डिज़ाइन करते समय चौड़ाई अक्सर अहम भूमिका निभाती है. यूज़र इंटरफ़ेस (यूआई) को अक्सर वर्टिकल तौर पर स्क्रोल किया जाता है. हालांकि, इसे हॉरिज़ॉन्टल तौर पर कम से कम जगह की ज़रूरत होती है.

उपलब्ध चौड़ाई भी यह तय करने में अहम भूमिका निभाती है कि हैंडसेट के लिए एक पैन वाला लेआउट इस्तेमाल करना है या टैबलेट के लिए मल्टीपैन वाला लेआउट. इसलिए, आपको इस बात से ज़्यादा फ़र्क़ पड़ता है कि हर डिवाइस पर सबसे कम चौड़ाई कितनी है.

डिवाइस की सबसे कम चौड़ाई में, स्क्रीन डेकोरेशन और सिस्टम यूज़र इंटरफ़ेस (यूआई) को ध्यान में रखा जाता है. उदाहरण के लिए, अगर डिवाइस की स्क्रीन पर ऐसे यूज़र इंटरफ़ेस (यूआई) एलिमेंट मौजूद हैं जो सबसे कम चौड़ाई वाले ऐक्सिस के साथ जगह घेरते हैं, तो सिस्टम सबसे कम चौड़ाई को स्क्रीन के असल साइज़ से कम मानता है. ऐसा इसलिए, क्योंकि ये स्क्रीन पिक्सल आपके यूज़र इंटरफ़ेस (यूआई) के लिए उपलब्ध नहीं हैं.

यहां स्क्रीन के सामान्य साइज़ के लिए, कुछ वैल्यू दी गई हैं:

  • 320, इन जैसे स्क्रीन कॉन्फ़िगरेशन वाले डिवाइसों के लिए:
    • 240x320 ldpi (QVGA हैंडसेट)
    • 320x480 mdpi (हैंडसेट)
    • 480x800 hdpi (हाई-डेंसिटी हैंडसेट)
  • 480, 480x800 mdpi (टैबलेट/हैंडसेट) जैसी स्क्रीन के लिए
  • 600, 600x1024 mdpi (7" टैबलेट) जैसी स्क्रीन के लिए
  • 720, 720x1280 mdpi (10" टैबलेट) जैसी स्क्रीन के लिए

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

एपीआई लेवल 13 में जोड़ा गया.

android:requiresSmallestWidthDp एट्रिब्यूट भी देखें. इससे यह पता चलता है कि आपका ऐप्लिकेशन कम से कम smallestWidth के साथ काम करता है. साथ ही, smallestScreenWidthDp कॉन्फ़िगरेशन फ़ील्ड देखें. इसमें डिवाइस के smallestWidth की वैल्यू होती है.

इस क्वालिफ़ायर का इस्तेमाल करके, अलग-अलग स्क्रीन के लिए डिज़ाइन करने के बारे में ज़्यादा जानने के लिए, व्यू के साथ रिस्पॉन्सिव/अडैप्टिव डिज़ाइन देखें.

उपलब्ध चौड़ाई और ऊंचाई

wdp

hdp

उदाहरण:

w720dp

w1024dp

h720dp

h1024dp

वगैरह

यह विकल्प, स्क्रीन की कम से कम चौड़ाई या ऊंचाई (dp यूनिट में, जिसे वैल्यू से तय किया जाता है) तय करता है. इस चौड़ाई या ऊंचाई पर, संसाधन का इस्तेमाल किया जाता है. इन कॉन्फ़िगरेशन वैल्यू की तुलना, डिसप्ले की मौजूदा चौड़ाई और ऊंचाई से की जाती है. ऐसा तब होता है, जब डिवाइस को पोर्ट्रेट से लैंडस्केप या लैंडस्केप से पोर्ट्रेट मोड में बदला जाता है, डिवाइस को फ़ोल्ड या अनफ़ोल्ड किया जाता है या सिस्टम मल्टी-विंडो मोड में चालू या बंद होता है. मल्टी-विंडो मोड में, वैल्यू से डिवाइस की स्क्रीन की चौड़ाई और ऊंचाई नहीं, बल्कि ऐप्लिकेशन वाली विंडो की चौड़ाई और ऊंचाई दिखती है. इसी तरह, एम्बेड की गई गतिविधियों के लिए वैल्यू, स्क्रीन की चौड़ाई और लंबाई के बजाय, अलग-अलग गतिविधियों की चौड़ाई और लंबाई से जुड़ी होती हैं. ज़्यादा जानकारी के लिए, गतिविधि को एम्बेड करना लेख पढ़ें.

उपलब्ध चौड़ाई और ऊंचाई, यह तय करने में अक्सर काम आती है कि मल्टीपैन लेआउट का इस्तेमाल करना है या नहीं. ऐसा इसलिए, क्योंकि टैबलेट डिवाइस पर भी, पोर्ट्रेट ओरिएंटेशन के लिए आपको अक्सर लैंडस्केप ओरिएंटेशन वाला मल्टीपैन लेआउट नहीं चाहिए होता. इसलिए, लेआउट के लिए ज़रूरी कम से कम चौड़ाई और/या ऊंचाई तय करने के लिए, इनका इस्तेमाल किया जा सकता है. इसके लिए, स्क्रीन साइज़ और ओरिएंटेशन क्वालिफ़ायर, दोनों का एक साथ इस्तेमाल करने की ज़रूरत नहीं है.

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

इन वैल्यू में, विंडो इंसर्ट के लिए इस्तेमाल की गई जगह शामिल नहीं होती. इसलिए, अगर डिवाइस के डिसप्ले के किनारों पर यूज़र इंटरफ़ेस (यूआई) के एलिमेंट मौजूद हैं, तो चौड़ाई और ऊंचाई की वैल्यू, स्क्रीन के असल डाइमेंशन से कम होती हैं. भले ही, ऐप्लिकेशन को Window.setDecorFitsSystemWindows या WindowCompat.setDecorFitsSystemWindows का इस्तेमाल करके, किनारे से किनारे तक दिखाया जा रहा हो.

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

ध्यान दें: सिस्टम, चौड़ाई और ऊंचाई, दोनों के हिसाब से मैच करने वाला संसाधन चुनता है. इसलिए, ऐसे संसाधन को प्राथमिकता दी जाती है जिसमें दोनों के बारे में बताया गया हो. इसके बजाय, ऐसे संसाधन को प्राथमिकता नहीं दी जाती है जिसमें सिर्फ़ एक के बारे में बताया गया हो. उदाहरण के लिए, अगर स्क्रीन की चौड़ाई 720 डीपी और लंबाई 1280 डीपी है, तो w720dp के तौर पर क्वालिफ़ाई किए गए संसाधन के बजाय, w700dp-h1200dp के तौर पर क्वालिफ़ाई किए गए संसाधन को चुना जाएगा. भले ही, पहला संसाधन स्क्रीन के डाइमेंशन से पूरी तरह मेल खाता हो.

एपीआई लेवल 13 में जोड़ा गया.

screenWidthDp और screenHeightDp कॉन्फ़िगरेशन फ़ील्ड भी देखें. इनमें स्क्रीन की मौजूदा चौड़ाई और ऊंचाई की जानकारी होती है.

इस क्वालिफ़ायर का इस्तेमाल करके, अलग-अलग स्क्रीन के लिए डिज़ाइन करने के बारे में ज़्यादा जानने के लिए, व्यू के साथ रिस्पॉन्सिव/अडैप्टिव डिज़ाइन देखें.

स्क्रीन का साइज़

small

normal

large

xlarge

  • small: ऐसी स्क्रीन जो कम डेंसिटी वाली QVGA स्क्रीन के साइज़ की होती हैं. छोटी स्क्रीन के लिए लेआउट का कम से कम साइज़, करीब 320x426 डीपी यूनिट होता है. उदाहरण के लिए, QVGA लो डेंसिटी और VGA हाई डेंसिटी.
  • normal: ऐसी स्क्रीन जिनका साइज़, मीडियम-डेंसिटी वाली HVGA स्क्रीन के बराबर होता है. सामान्य स्क्रीन के लिए, लेआउट का कम से कम साइज़ करीब 320x470 डीपी यूनिट होता है. इस तरह की स्क्रीन के उदाहरण हैं: WQVGA कम डेंसिटी, HVGA मीडियम डेंसिटी, और WVGA हाई डेंसिटी.
  • large: ऐसी स्क्रीन जो मीडियम-डेंसिटी वाली वीजीए स्क्रीन के साइज़ की हों. बड़ी स्क्रीन के लिए, लेआउट का कम से कम साइज़ करीब 480x640 डीपी यूनिट होना चाहिए. उदाहरण के लिए, VGA और WVGA मीडियम-डेंसिटी वाली स्क्रीन.
  • xlarge: ऐसी स्क्रीन जो मीडियम-डेंसिटी वाली पारंपरिक एचवीजीए स्क्रीन से काफ़ी बड़ी होती हैं. ज़्यादा बड़ी स्क्रीन के लिए, लेआउट का कम से कम साइज़ करीब 720x960 डीपी यूनिट होता है. ज़्यादातर मामलों में, बहुत बड़ी स्क्रीन वाले डिवाइसों को जेब में नहीं रखा जा सकता. साथ ही, ये डिवाइस ज़्यादातर टैबलेट स्टाइल के होते हैं. एपीआई लेवल 9 में जोड़ा गया.

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

चेतावनी: अगर आपके सभी संसाधनों में, स्क्रीन के मौजूदा साइज़ से बड़ा साइज़ क्वालिफ़ायर इस्तेमाल किया जाता है, तो सिस्टम उनका इस्तेमाल नहीं करता है. साथ ही, रनटाइम के दौरान आपका ऐप्लिकेशन क्रैश हो जाता है. उदाहरण के लिए, ऐसा तब होता है, जब सभी लेआउट रिसॉर्स को xlarge क्वालिफ़ायर के साथ टैग किया गया हो, लेकिन डिवाइस की स्क्रीन का साइज़ सामान्य हो.

इसे एपीआई लेवल 4 में जोड़ा गया है.

screenLayout कॉन्फ़िगरेशन फ़ील्ड भी देखें. इससे पता चलता है कि स्क्रीन छोटी, सामान्य या बड़ी है.

ज़्यादा जानकारी के लिए, स्क्रीन के साथ काम करने की सुविधा के बारे में खास जानकारी लेख पढ़ें.

स्क्रीन का आसपेक्ट रेशियो

long

notlong

  • long: लंबी स्क्रीन, जैसे कि WQVGA, WVGA, FWVGA
  • notlong: लंबी स्क्रीन नहीं, जैसे कि QVGA, HVGA, और VGA

इसे एपीआई लेवल 4 में जोड़ा गया है.

यह पूरी तरह से स्क्रीन के आसपेक्ट रेशियो पर आधारित होता है (long स्क्रीन ज़्यादा चौड़ी होती है). यह समस्या स्क्रीन के ओरिएंटेशन से जुड़ी नहीं है.

screenLayout कॉन्फ़िगरेशन फ़ील्ड भी देखें. इससे पता चलता है कि स्क्रीन लंबी है या नहीं.

गोल स्क्रीन

round

notround

  • round: गोल स्क्रीन वाले डिवाइस, जैसे कि गोल स्मार्टवॉच
  • notround: आयताकार स्क्रीन, जैसे कि फ़ोन या टैबलेट

एपीआई लेवल 23 में जोड़ा गया.

isScreenRound कॉन्फ़िगरेशन का तरीका भी देखें. इससे पता चलता है कि स्क्रीन गोल है या नहीं.

वाइड कलर गैमट

widecg

nowidecg

  • widecg: डिसप्ले, जिनमें कलर गैमट की रेंज ज़्यादा होती है. जैसे, Display P3 या AdobeRGB
  • nowidecg: नैरो कलर गैमट वाले डिसप्ले, जैसे कि sRGB

इसे एपीआई लेवल 26 में जोड़ा गया है.

isScreenWideColorGamut कॉन्फ़िगरेशन का तरीका भी देखें. इससे पता चलता है कि स्क्रीन में वाइड कलर गैमट है या नहीं.

हाई डाइनैमिक रेंज (एचडीआर)

highdr

lowdr

  • highdr: हाई डाइनैमिक रेंज वाले डिसप्ले
  • lowdr: कम/स्टैंडर्ड डाइनैमिक रेंज वाले डिसप्ले

इसे एपीआई लेवल 26 में जोड़ा गया है.

isScreenHdr कॉन्फ़िगरेशन का तरीका भी देखें. इससे पता चलता है कि स्क्रीन पर एचडीआर की सुविधा है या नहीं.

स्क्रीन की दिशा

port

land

  • port: डिवाइस पोर्ट्रेट ओरिएंटेशन (वर्टिकल) में है
  • land: डिवाइस लैंडस्केप ओरिएंटेशन (हॉरिज़ॉन्टल) में है

अगर उपयोगकर्ता स्क्रीन को घुमाता है, तो ऐप्लिकेशन के चालू रहने के दौरान यह बदल सकता है. इसकी वजह से, रनटाइम के दौरान आपके ऐप्लिकेशन पर क्या असर पड़ता है, इस बारे में जानने के लिए कॉन्फ़िगरेशन में हुए बदलावों को मैनेज करना लेख पढ़ें.

orientation कॉन्फ़िगरेशन फ़ील्ड भी देखें. इससे डिवाइस के मौजूदा ओरिएंटेशन के बारे में पता चलता है.

यूज़र इंटरफ़ेस (यूआई) मोड

car

desk

television

appliance

watch

vrheadset

  • car: डिवाइस, कार डॉक में दिख रहा हो
  • desk: डिवाइस को डेस्क डॉक में दिखाया जा रहा है
  • television: डिवाइस, टीवी पर डिसप्ले हो रहा है. इससे "दस फ़ीट" का अनुभव मिलता है. इसमें यूज़र इंटरफ़ेस (यूआई) बड़ी स्क्रीन पर दिखता है और उपयोगकर्ता उससे दूर होता है. साथ ही, यह अनुभव मुख्य रूप से डी-पैड या अन्य नॉन-पॉइंटर इंटरैक्शन पर आधारित होता है
  • appliance: डिवाइस, डिसप्ले के बिना एक उपकरण के तौर पर काम कर रहा है
  • watch: डिवाइस में डिसप्ले है और इसे कलाई पर पहना जाता है
  • vrheadset: डिवाइस, वर्चुअल रिएलिटी हेडसेट में दिख रहा है

एपीआई लेवल 8 में जोड़ा गया; टेलीविज़न को एपीआई 13 में जोड़ा गया; डिवाइस को एपीआई 16 में जोड़ा गया; घड़ी को एपीआई 20 में जोड़ा गया; वीआर हेडसेट को एपीआई 26 में जोड़ा गया.

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

अगर उपयोगकर्ता डिवाइस को डॉक में रखता है, तो ऐप्लिकेशन के चालू रहने के दौरान यह बदल सकता है. UiModeManager का इस्तेमाल करके, इनमें से कुछ मोड को चालू या बंद किया जा सकता है. इसकी वजह से, रनटाइम के दौरान आपके ऐप्लिकेशन पर क्या असर पड़ता है, इस बारे में जानने के लिए कॉन्फ़िगरेशन में हुए बदलावों को मैनेज करना लेख पढ़ें.

नाइट मोड

night

notnight

  • night: रात के समय
  • notnight: दिन के समय

एपीआई लेवल 8 में जोड़ा गया.

अगर नाइट मोड को ऑटो मोड (डिफ़ॉल्ट) पर सेट किया जाता है, तो ऐप्लिकेशन के इस्तेमाल के दौरान यह मोड बदल सकता है. ऐसे में, दिन के समय के हिसाब से मोड बदलता है. UiModeManager का इस्तेमाल करके, इस मोड को चालू या बंद किया जा सकता है. इसकी वजह से, रनटाइम के दौरान आपके ऐप्लिकेशन पर क्या असर पड़ता है, इस बारे में जानने के लिए कॉन्फ़िगरेशन में हुए बदलावों को मैनेज करना लेख पढ़ें.

स्क्रीन पिक्सल डेंसिटी (डीपीआई)

ldpi

mdpi

hdpi

xhdpi

xxhdpi

xxxhdpi

nodpi

tvdpi

anydpi

nnndpi

  • ldpi: कम डेंसिटी वाली स्क्रीन; करीब 120 डीपीआई.
  • mdpi: मीडियम-डेंसिटी (पारंपरिक एचवीजीए पर) स्क्रीन; करीब 160 डीपीआई.
  • hdpi: ज़्यादा डेंसिटी वाली स्क्रीन; करीब 240 डीपीआई.
  • xhdpi: एक्स्ट्रा-हाई-डेंसिटी वाली स्क्रीन; करीब 320 डीपीआई. एपीआई लेवल 8 में जोड़ा गया.
  • xxhdpi: एक्स्ट्रा-एक्स्ट्रा-हाई-डेंसिटी वाली स्क्रीन; करीब 480 डीपीआई. इसे एपीआई लेवल 16 में जोड़ा गया है.
  • xxxhdpi: बहुत ज़्यादा डेंसिटी वाले पिक्सल का इस्तेमाल (सिर्फ़ लॉन्चर आइकॉन के लिए—अलग-अलग पिक्सल डेंसिटी के साथ काम करना देखें); करीब 640 डीपीआई. इसे एपीआई लेवल 18 में जोड़ा गया है.
  • nodpi: इसका इस्तेमाल बिटमैप इमेज के लिए किया जाता है. इन इमेज को डिवाइस की डेंसिटी के हिसाब से छोटा-बड़ा नहीं किया जाता.
  • tvdpi: mdpi और hdpi के बीच की स्क्रीन; करीब 213 डीपीआई. इसे "प्राइमरी" डेनसिटी ग्रुप नहीं माना जाता. यह सुविधा, मुख्य रूप से 720 पिक्सल वाले टीवी के लिए है. ज़्यादातर ऐप्लिकेशन को इसकी ज़रूरत नहीं होती. 1080 पिक्सल रिज़ॉल्यूशन वाले टीवी पैनल के लिए xhdpi और 4K रिज़ॉल्यूशन वाले टीवी पैनल के लिए xxxhdpi का इस्तेमाल करें. एपीआई लेवल 13 में जोड़ा गया.
  • anydpi: यह सभी स्क्रीन डेंसिटी से मेल खाता है और अन्य क्वालिफ़ायर के मुकाबले इसे प्राथमिकता दी जाती है. यह ड्रॉ करने लायक वेक्टर के लिए काम का है. एपीआई लेवल 21 में जोड़ा गया.
  • nnndpi: इसका इस्तेमाल, नॉन-स्टैंडर्ड डेंसिटी को दिखाने के लिए किया जाता है. इसमें nnn, स्क्रीन की डेंसिटी का पॉज़िटिव पूर्णांक होता है. ज़्यादातर मामलों में इसका इस्तेमाल नहीं किया जाता. स्टैंडर्ड डेंसिटी बकेट का इस्तेमाल करने से, बाज़ार में मौजूद अलग-अलग डिवाइसों की स्क्रीन डेंसिटी के लिए सहायता देने का खर्च काफ़ी कम हो जाता है.

छह मुख्य डेंसिटी (tvdpi डेंसिटी को छोड़कर) के बीच, 3:4:6:8:12:16 का स्केलिंग अनुपात होता है. इसलिए, ldpi में 9x9 बिटमैप, mdpi में 12x12, hdpi में 18x18, xhdpi में 24x24 वगैरह होता है.

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

अलग-अलग स्क्रीन डेंसिटी को मैनेज करने और Android, बिटमैप को मौजूदा डेंसिटी के हिसाब से कैसे स्केल करता है, इस बारे में ज़्यादा जानने के लिए, स्क्रीन के साथ काम करने की सुविधा के बारे में खास जानकारी देखें.

टचस्क्रीन का टाइप

notouch

finger

  • notouch: डिवाइस में टचस्क्रीन नहीं है.
  • finger: डिवाइस में टचस्क्रीन है, जिसे उपयोगकर्ता की उंगली से सीधे तौर पर इस्तेमाल किया जा सकता है.

touchscreen कॉन्फ़िगरेशन फ़ील्ड भी देखें. इससे पता चलता है कि डिवाइस पर किस तरह की टचस्क्रीन है.

कीबोर्ड उपलब्ध है या नहीं

keysexposed

keyshidden

keyssoft

  • keysexposed: डिवाइस में कीबोर्ड उपलब्ध है. अगर डिवाइस पर सॉफ़्टवेयर कीबोर्ड चालू है (ऐसा होने की संभावना है), तो इसका इस्तेमाल तब भी किया जाता है, जब हार्डवेयर कीबोर्ड उपयोगकर्ता को नहीं दिख रहा होता या जब डिवाइस में हार्डवेयर कीबोर्ड नहीं होता है. अगर कोई सॉफ़्टवेयर कीबोर्ड उपलब्ध नहीं है या उसे बंद कर दिया गया है, तो इसका इस्तेमाल सिर्फ़ तब किया जाता है, जब हार्डवेयर कीबोर्ड चालू हो.
  • keyshidden: डिवाइस में हार्डवेयर कीबोर्ड उपलब्ध है, लेकिन वह छिपा हुआ है और डिवाइस में सॉफ़्टवेयर कीबोर्ड चालू नहीं है.
  • keyssoft: डिवाइस में सॉफ़्टवेयर कीबोर्ड चालू है. भले ही, वह दिख रहा हो या नहीं.

अगर आपने keysexposed रिसॉर्स दिए हैं, लेकिन keyssoft रिसॉर्स नहीं दिए हैं, तो सिस्टम keysexposed रिसॉर्स का इस्तेमाल करेगा. भले ही, कीबोर्ड दिख रहा हो या नहीं. हालांकि, इसके लिए ज़रूरी है कि सिस्टम में सॉफ़्टवेयर कीबोर्ड चालू हो.

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

कॉन्फ़िगरेशन फ़ील्ड hardKeyboardHidden और keyboardHidden भी देखें. इनसे पता चलता है कि हार्डवेयर कीबोर्ड और किसी भी तरह के कीबोर्ड (सॉफ़्टवेयर कीबोर्ड भी शामिल है) को दिखाया जा सकता है या नहीं.

टेक्स्ट डालने का मुख्य तरीका

nokeys

qwerty

12key

  • nokeys: डिवाइस में टेक्स्ट डालने के लिए कोई हार्डवेयर बटन नहीं है.
  • qwerty: डिवाइस में हार्डवेयर QWERTY कीबोर्ड है. भले ही, यह उपयोगकर्ता को दिखता हो या नहीं.
  • 12key: डिवाइस में 12 बटन वाला हार्डवेयर कीबोर्ड है. भले ही, यह उपयोगकर्ता को दिखता हो या न दिखता हो.

keyboard कॉन्फ़िगरेशन फ़ील्ड भी देखें. इससे पता चलता है कि टेक्स्ट इनपुट करने का मुख्य तरीका कौन-सा है.

नेविगेशन की उपलब्धता

navexposed

navhidden

  • navexposed: उपयोगकर्ता के लिए नेविगेशन कुंजियां उपलब्ध हैं.
  • navhidden: नेविगेशन कुंजियां उपलब्ध नहीं हैं (जैसे कि बंद ढक्कन के पीछे).

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

navigationHidden कॉन्फ़िगरेशन फ़ील्ड भी देखें. इससे पता चलता है कि नेविगेशन कुंजियां छिपी हुई हैं या नहीं.

बिना टच किए नेविगेट करने का मुख्य तरीका

nonav

dpad

trackball

wheel

  • nonav: डिवाइस में टचस्क्रीन के अलावा, नेविगेशन की कोई सुविधा नहीं है.
  • dpad: डिवाइस में नेविगेशन के लिए डायरेक्शनल-पैड (डी-पैड) है.
  • trackball: डिवाइस में नेविगेशन के लिए ट्रैकबॉल है.
  • wheel: डिवाइस में नेविगेशन के लिए दिशा बदलने वाले पहिए हैं (यह सुविधा आम तौर पर नहीं मिलती).

navigation कॉन्फ़िगरेशन फ़ील्ड भी देखें. इससे पता चलता है कि नेविगेशन का कौन-सा तरीका उपलब्ध है.

प्लैटफ़ॉर्म वर्शन (एपीआई लेवल)

उदाहरण:

v3

v4

v7

वगैरह

डिवाइस पर काम करने वाला एपीआई लेवल. उदाहरण के लिए, v1 एपीआई लेवल 1 (Android 1.0 या इसके बाद के वर्शन वाले डिवाइस) और v4 एपीआई लेवल 4 (Android 1.6 या इसके बाद के वर्शन वाले डिवाइस) के लिए. इन वैल्यू के बारे में ज़्यादा जानने के लिए, Android API लेवल दस्तावेज़ देखें.

क्वालिफ़ायर के नाम से जुड़े नियम

कॉन्फ़िगरेशन क्वालिफ़ायर के नामों का इस्तेमाल करने के बारे में कुछ नियम यहां दिए गए हैं:

  • संसाधनों के एक सेट के लिए, डैश का इस्तेमाल करके कई क्वालिफ़ायर तय किए जा सकते हैं. उदाहरण के लिए, 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.hello string रिसॉर्स टाइप है और hello रिसॉर्स का नाम है. ऐसे कई Android API हैं जो इस फ़ॉर्मैट में संसाधन आईडी देने पर, आपके संसाधनों को ऐक्सेस कर सकते हैं. ज़्यादा जानकारी के लिए, कोड में संसाधनों को ऐक्सेस करना सेक्शन देखें.
  • एक्सएमएल में: एक खास एक्सएमएल सिंटैक्स का इस्तेमाल करके, जो आपकी R क्लास में तय किए गए संसाधन आईडी से मेल खाता है. जैसे: @string/hello string संसाधन का टाइप है और 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 अलग-अलग स्क्रीन डेंसिटी के हिसाब से सबसे सही इमेज ढूंढ सकता है. साथ ही, ज़रूरत के हिसाब से बिटमैप को स्केल कर सकता है. हालांकि, सभी तरह के डिवाइसों पर बेहतर अनुभव पाने के लिए, तीनों तरह की डेंसिटी के लिए वैकल्पिक ड्रॉएबल उपलब्ध कराएं.