ऐप्लिकेशन के संसाधनों की खास जानकारी

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

ऐप्लिकेशन के संसाधनों को हमेशा अपने डिवाइस से बाहर करें, जैसे कि इमेज और स्ट्रिंग ताकि आप उनका रखरखाव स्वतंत्र रूप से कर सकें. साथ ही, डिवाइस कॉन्फ़िगरेशन को खास नाम वाली रिसॉर्स डायरेक्ट्री में ग्रुप करके. पर रनटाइम के दौरान, 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 में दी गई है.

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

टेबल 1. संसाधन डायरेक्ट्री प्रोजेक्ट res/ डायरेक्ट्री में काम करता है.

डायरेक्ट्री संसाधन किस तरह का है
animator/ प्रॉपर्टी के बारे में जानकारी देने वाली एक्सएमएल फ़ाइलें ऐनिमेशन.
anim/ Tween को परिभाषित करने वाली एक्सएमएल फ़ाइलें ऐनिमेशन. प्रॉपर्टी ऐनिमेशन को इस डायरेक्ट्री में भी सेव किया जा सकता है, लेकिन प्रॉपर्टी ऐनिमेशन के लिए animator/ डायरेक्ट्री का इस्तेमाल किया जाता है, ताकि इन दोनों के बीच अंतर किया जा सके प्रकार.
color/ एक्सएमएल फ़ाइलें जो रंगों की स्थिति के बारे में जानकारी देती हैं. ज़्यादा जानकारी के लिए, रंग देखें राज्य की सूची में इस्तेमाल किया गया संसाधन.
drawable/

बिटमैप फ़ाइलें (PNG, .9.png, JPG या GIF) या एक्सएमएल फ़ाइलें जो नीचे दिए गए ड्रॉ करने लायक संसाधन के सब-टाइप में कंपाइल किए गए हैं:

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

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

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

आर्बिट्रेरी फ़ाइलें, जिन्हें उनके मूल रूप में सेव किया जाना है. इन संसाधनों को बिना किसी बदलाव के InputStream, कॉल करें रिसॉर्स आईडी के साथ Resources.openRawResource(), जो R.raw.filename है.

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

values/

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

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

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

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

xml/ ऐसी आर्बिट्ररी एक्सएमएल फ़ाइलें जिन्हें रनटाइम के दौरान, Resources.getXML() को कॉल करके पढ़ा जा सकता है. अलग-अलग एक्सएमएल कॉन्फ़िगरेशन फ़ाइलें यहां सेव करें, जैसे कि Search से जुड़ा कॉन्फ़िगरेशन.
font/ TTF, OTF, या टीटीसी या एक्सएमएल फ़ाइलें हैं जो <font-family> एलिमेंट शामिल करें. इसके बारे में ज़्यादा जानकारी पाने के लिए, फ़ॉन्ट संसाधन के रूप में देखें, तो एक्सएमएल रिसॉर्स के तौर पर फ़ॉन्ट जोड़ें.

चेतावनी: संसाधन फ़ाइलों को कभी भी सीधे res/ डायरेक्ट्री. इससे कंपाइलर की गड़बड़ी होती है.

अलग-अलग तरह के संसाधनों के बारे में ज़्यादा जानकारी के लिए, संसाधन टाइप की खास जानकारी देखें.

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

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

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

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

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

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

  1. res/ में नाम वाली एक नई डायरेक्ट्री बनाएं <resources_name>-<qualifier>.
    • <resources_name>, इससे जुड़े डिफ़ॉल्ट खाते की डायरेक्ट्री का नाम है संसाधन (टेबल 1 में बताए गए हैं).
    • <qualifier> ऐसा नाम है जो किसी अलग कॉन्फ़िगरेशन के बारे में बताता है जिनके लिए इन संसाधनों का इस्तेमाल किया जाना है (टेबल 2 में बताया गया है).

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

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

  2. इस नई डायरेक्ट्री में इसके हिसाब से वैकल्पिक संसाधन सेव करें. संसाधन फ़ाइलों को नाम बिलकुल डिफ़ॉल्ट रिसॉर्स फ़ाइलों जैसा ही है.

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

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

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

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

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

दूसरी टेबल. कॉन्फ़िगरेशन क्वालीफ़ायर नाम.

कॉन्फ़िगरेशन क्वालिफ़ायर वैल्यू ब्यौरा
एमसीसी और एमएनसी उदाहरण:
mcc310
mcc310-mnc004
mcc208-mnc00

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

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

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

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-1 भाषा कोड से तय की जाती है. इसके बाद, वैकल्पिक भाषा का इस्तेमाल किया जाता है दो अक्षर वाले ISO 3166-1-alpha-2 वाले इलाके के कोड के हिसाब से (पहले लोअरकेस r).

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

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

BCP 47 भाषा टैग का इस्तेमाल करने के लिए, b+ और दो अक्षर का ISO 639-1 भाषा कोड, वैकल्पिक रूप से फ़ॉलो किया जाता है + से अलग किए गए अतिरिक्त सब-टैग का इस्तेमाल करें.

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

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

getLocales() विधि भी देखें, जो स्थान-भाषाएं. इस सूची में मुख्य स्थान-भाषा शामिल है.

लेआउट की दिशा ldrtl
ldltr

आपके ऐप्लिकेशन के लेआउट की दिशा. ldrtl का मतलब है "लेआउट-निर्देश-दाएं से बाएं". ldltr का मतलब है "लेआउट-दिशा-निर्देश बाएं से दाएं" और डिफ़ॉल्ट इंप्लिसिट वैल्यू है.

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

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


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

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

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

सबसे कम चौड़ाई की स्क्रीन सेट करें sw<N>dp

उदाहरण:
sw320dp
sw600dp
sw720dp
वगैरह

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

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

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

उपलब्ध चौड़ाई यह तय करने में भी मुख्य कारक होता है कि एक पैनल वाले लेआउट का इस्तेमाल करना है या नहीं हैंडसेट या टैबलेट के लिए मल्टीपैन लेआउट. इसलिए, ऐसा हो सकता है कि आप हर डिवाइस की सबसे छोटी चौड़ाई कितनी हो.

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

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

  • 320 के साथ काम करता है.
    • 240x320 ldpi (QVGA हैंडसेट)
    • 320x480 mdpi (हैंडसेट)
    • 480x800 hdpi (हाई-डेंसिटी हैंडसेट)
  • 480, 480x800 mdpi (टैबलेट/हैंडसेट) जैसी स्क्रीन के लिए
  • 600, 600x1024 mdpi (7" टैबलेट) जैसी स्क्रीन के लिए
  • 720, 720x1280 mdpi (10" टैबलेट) जैसी स्क्रीन के लिए

जब आपका ऐप्लिकेशन, तो सिस्टम, smallestWidth क्वालीफ़ायर का इस्तेमाल करता है. सिस्टम, डिवाइस का smallestWidth.

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

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

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

उपलब्ध चौड़ाई और ऊंचाई w<N>dp
h<N>dp

उदाहरण:
w720dp
w1024dp
h720dp
h1024dp
वगैरह

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

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

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

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

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

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

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

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

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

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

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

यह आपके ऐप्लिकेशन के चालू रहने के दौरान बदल सकता है, अगर उपयोगकर्ता ने डिवाइस को डॉक. इनमें से कुछ मोड को चालू या बंद किया जा सकता है 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 डीपीआई. इसे "प्राइमरी" नहीं माना जाता सघनता समूह. यह ज़्यादातर 720p वाले टेलीविज़न के लिए होता है और ज़्यादातर ऐप्लिकेशन को इसकी ज़रूरत नहीं होती. 1080 पिक्सल वाले टीवी पैनल के लिए xhdpi का इस्तेमाल करें. 4K टीवी पैनल के लिए भी इसका इस्तेमाल करें xxxhdpi. एपीआई लेवल 13 में जोड़ा गया.
  • anydpi: यह सभी स्क्रीन डेंसिटी से मेल खाता है. इसे प्राथमिकता दी जाती है अन्य क्वालिफ़ायर. यह इनके लिए काम का है ड्रॉर ड्रॉबल में बदल सकते हैं. एपीआई लेवल 21 में जोड़ा गया.
  • nnndpi: इसका इस्तेमाल नॉन-स्टैंडर्ड डेंसिटी दिखाने के लिए किया जाता है, जहां nnn एक धनात्मक पूर्णांक स्क्रीन है. यह इसका इस्तेमाल ज़्यादातर मामलों में नहीं किया जाता है. स्टैंडर्ड डेंसिटी बकेट का इस्तेमाल करने से, डेटा की सुरक्षा डिवाइस की स्क्रीन डेंसिटी को सपोर्ट करने वाले ओवरहेड का इस्तेमाल किया जाता है.

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

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

इस बारे में ज़्यादा जानकारी कि 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 कॉन्फ़िगरेशन फ़ील्ड भी देखें, यह विकल्प, टेक्स्ट इनपुट के मुख्य तरीके के बारे में बताता है.

प्लैटफ़ॉर्म वर्शन (एपीआई लेवल) उदाहरण:
v3
v4
v7
वगैरह

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

ध्यान दें: Android के सभी वर्शन में, सभी क्वालीफ़ायर मौजूद नहीं होते हैं. नए क्वालीफ़ायर का इंप्लिसिट रूप से इस्तेमाल करना प्लैटफ़ॉर्म वर्शन क्वालीफ़ायर जोड़ता है, ताकि पुराने डिवाइस इसे अनदेखा कर सकें. उदाहरण के लिए, w600dp क्वालीफ़ायर में v13 क्वालीफ़ायर अपने-आप शामिल हो जाता है, क्योंकि उपलब्ध-चौड़ाई वाला क्वालीफ़ायर, एपीआई लेवल 13 में नया था. किसी भी समस्या से बचने के लिए, हमेशा डिफ़ॉल्ट संसाधन (संसाधनों का एक सेट, जिनके लिए क्वालिफ़ायर नहीं होता). ज़्यादा जानकारी के लिए, देखें यह सुविधा, किन डिवाइसों के साथ काम करती है, इसके बारे में जानकारी संसाधन शामिल हैं.

क्वालिफ़ायर के नाम के नियम

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

  • आपके पास संसाधनों के एक सेट के लिए, एक से ज़्यादा क्वालिफ़ायर तय करने का विकल्प है. इन्हें डैश से अलग किया जाता है. इसके लिए उदाहरण के लिए, लैंडस्केप मोड में, 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 संबंधित डिफ़ॉल्ट संसाधन का उपयोग करता है— किसी खास तरह के संसाधन के लिए संसाधनों का सेट, जिसमें कॉन्फ़िगरेशन शामिल नहीं है क्वालीफ़ायर.

उपनाम संसाधन बनाएं

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

ध्यान दें: सभी संसाधनों में ऐसा तरीका उपलब्ध नहीं है जिसकी मदद से किसी अन्य संसाधन के लिए उपनाम बनाएं. विशेष रूप से, एनिमेशन, मेनू, रॉ और अन्य अनिर्दिष्ट xml/ डायरेक्ट्री में मौजूद संसाधनों में यह सुविधा नहीं है.

उदाहरण के लिए, मान लें कि आपके पास ऐप्लिकेशन आइकॉन icon.png है और आपको को अलग-अलग भाषाओं में तैयार नहीं किया जा सकता. हालांकि, दो भाषाओं, अंग्रेज़ी-कैनेडियन और फ़्रेंच-कैनेडियन को उसी वर्शन का इस्तेमाल करें. आपको एक ही इमेज कॉपी करने की ज़रूरत नहीं है को अंग्रेज़ी-कैनेडियन और फ़्रेंच-कैनेडियन, दोनों के लिए संसाधन डायरेक्ट्री में शामिल किया जाएगा. इसके बजाय, आप इसके अलावा किसी भी नाम का इस्तेमाल करके उस इमेज को सेव कर सकते हैं जिसका इस्तेमाल दोनों में किया जाता है icon.png, जैसे कि icon_ca.png और डिफ़ॉल्ट res/drawable/ डायरेक्ट्री में मिलेगी. इसके बाद, res/drawable-en-rCA/ और res/drawable-fr-rCA/ में एक ऐसी icon.xml फ़ाइल बनाएं जो icon_ca.png से जुड़ी हो संसाधन खोजें.<bitmap> इससे आपको सिर्फ़ एक वर्शन सेव करने की सुविधा मिलती है PNG फ़ाइल और दो छोटी एक्सएमएल फ़ाइलें, जो उस पर ले जाती हैं. नीचे दिए गए सेक्शन में दिए गए उदाहरण देखें देखें.

ड्रॉएबल

ड्रॉएबल मौजूदा किसी मौजूदा में उपनाम बनाने के लिए, <drawable> एलिमेंट का इस्तेमाल करें:

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <drawable name="icon">@drawable/icon_ca</drawable>
</resources>

अगर आप इस फ़ाइल को icon.xml के तौर पर सेव करते हैं, तो रिसॉर्स डायरेक्ट्री, जैसे कि res/values-en-rCA/ को कंपाइल किया जाता है जिसे आप 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 के लिए एक उपनाम है संसाधन.

स्ट्रिंग और अन्य आसान वैल्यू

किसी मौजूदा स्ट्रिंग में उपनाम बनाने के लिए, अपनी पसंद की स्ट्रिंग के संसाधन आईडी का इस्तेमाल करें स्ट्रिंग का मान नई स्ट्रिंग के रूप में डालें:

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <string name="hello">Hello</string>
    <string name="hi">@string/hello</string>
</resources>

R.string.hi संसाधन को अब R.string.hello के लिए उपनाम हो गया है.

अन्य सामान्य वैल्यू रणनीति के हिसाब से काम करती हैं उसी तरह, जैसे कि रंग:

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <color name="red">#f00</color>
    <color name="highlight">@color/red</color>
</resources>

अपने ऐप्लिकेशन के संसाधनों को ऐक्सेस करें

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

आपके ऐप्लिकेशन को कंपाइल करने पर, aapt एक R क्लास जनरेट करता है. इसमें यह शामिल होता है आपकी res/ डायरेक्ट्री के सभी संसाधनों के संसाधन आईडी. हर तरह के संसाधन के लिए, यहां एक R सब-क्लास मौजूद है, जैसे ड्रॉ करने लायक सभी संसाधनों के लिए R.drawable. साथ ही, इस तरह के हर संसाधन के लिए एक स्टैटिक पूर्णांक, जैसे कि R.drawable.icon. यह पूर्णांक वह संसाधन आईडी है जिसका इस्तेमाल किया जा सकता है का इस्तेमाल करें.

हालांकि, R क्लास वह जगह है जहां रिसॉर्स आईडी दिए गए हैं, लेकिन आपको ये काम करने की ज़रूरत नहीं है संसाधन आईडी का पता लगाने के लिए इसका इस्तेमाल करें. संसाधन आईडी में हमेशा ये चीज़ें शामिल होती हैं:

  • संसाधन टाइप: हर रिसॉर्स को "टाइप" में रखा जाता है जैसे कि string, drawable और layout. अलग-अलग टाइप के बारे में ज़्यादा जानकारी के लिए, संसाधन टाइप की खास जानकारी देखें.
  • संसाधन नाम, जो कि फ़ाइल का नाम है एक्सएमएल android:name एट्रिब्यूट में एक्सटेंशन या वैल्यू को शामिल नहीं करता, अगर संसाधन एक सामान्य मान होता है, जैसे स्ट्रिंग.

किसी संसाधन को ऐक्सेस करने के दो तरीके हैं:

  • कोड में: अपने R के सब-क्लास के स्टैटिक पूर्णांक का इस्तेमाल करके क्लास का इस्तेमाल करें, जैसे:
    R.string.hello

    string, रिसॉर्स टाइप है और hello रिसॉर्स का नाम है. कई ऐसे Android API जो इस फ़ॉर्मैट में संसाधन आईडी देने पर, आपके संसाधनों को ऐक्सेस कर सकते हैं. ज़्यादा के लिए ज़्यादा जानकारी के लिए, कोड में ऐक्सेस संसाधन सेक्शन देखें.

  • एक्सएमएल में: ऐसा खास एक्सएमएल सिंटैक्स इस्तेमाल करना जो आपकी R क्लास में बताए गए संसाधन आईडी का इस्तेमाल करें, जैसे:
    @string/hello

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

कोड में मौजूद संसाधनों को ऐक्सेस करें

रिसॉर्स आईडी को मेथड पैरामीटर के तौर पर पास करके, कोड में किसी संसाधन का इस्तेमाल किया जा सकता है. इसके लिए उदाहरण के लिए, res/drawable/myimage.png का इस्तेमाल करने के लिए, ImageView को सेट किया जा सकता है setImageResource() का इस्तेमाल करके संसाधन:

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);

चेतावनी: R.java फ़ाइल में मैन्युअल तरीके से कोई बदलाव न करें. यह aapt टूल से तब जनरेट होता है, जब आपका प्रोजेक्ट कंपाइल किया गया. अगली बार कंपाइल करने पर, सभी बदलाव बदल जाते हैं.

एक्सएमएल से संसाधनों को ऐक्सेस करें

कुछ एक्सएमएल एट्रिब्यूट और एलिमेंट के लिए वैल्यू तय करने के लिए, मौजूदा संसाधन का संदर्भ दें. आप लेआउट फ़ाइलें बनाते समय अक्सर ऐसा करते हैं. आपके विजेट के लिए स्ट्रिंग और चित्र उपलब्ध करा सकता है.

उदाहरण के लिए, अगर आपने अपने लेआउट में 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" />

यह बेकार लगता है, लेकिन किसी दूसरे संसाधन का इस्तेमाल करते समय बहुत मददगार हो सकता है. ज़्यादा के लिए जानकारी के लिए, उपनाम संसाधन बनाने के बारे में सेक्शन देखें.

रेफ़रंस स्टाइल एट्रिब्यूट

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

स्टाइल एट्रिब्यूट का रेफ़रंस देने के लिए, नाम सिंटैक्स करीब-करीब सामान्य रिसॉर्स जैसा होता है फ़ॉर्मैट, लेकिन "at" के बजाय सिंबल (@), सवाल के निशान (?) का इस्तेमाल करें. कॉन्टेंट बनाने संसाधन प्रकार वाला हिस्सा वैकल्पिक है. इसलिए, रेफ़रंस सिंटैक्स इस तरह है:

?[<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 में मौजूद आइटम के लिए प्लैटफ़ॉर्म. Google Analytics 4 पर माइग्रेट करने के बजाय, सूची आइटम के लिए आपका अपना लेआउट.

इन संसाधनों का इस्तेमाल करके, डिवाइसों के साथ बेहतर तरीके से काम करना

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

उदाहरण के लिए, अगर आपका ऐप्लिकेशन कई भाषाओं में काम करता है, तो भाषा और क्षेत्र क्वालीफ़ायर के बिना हमेशा 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 के लिए, स्क्रीन डेंसिटी और स्केल के हिसाब से सबसे सही तरीके का इस्तेमाल किया जा सकता है ज़रूरत के मुताबिक बिटमैप जोड़ सकते हैं. हालांकि, सभी प्रकार के उपकरणों पर सर्वोत्तम अनुभव के लिए, सभी तीन प्रकार की सघनता के लिए वैकल्पिक ड्रॉएबल उपलब्ध कराए जा सकते हैं.

Android सबसे ज़्यादा मिलते-जुलते संसाधन कैसे ढूंढता है

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

drawable/
drawable-en/
drawable-fr-rCA/
drawable-en-port/
drawable-en-notouch-12key/
drawable-port-ldpi/
drawable-port-notouch-12key/

और मान लें कि डिवाइस कॉन्फ़िगरेशन नीचे दिया गया है:

स्थान-भाषा = en-GB
स्क्रीन ओरिएंटेशन = port
स्क्रीन पिक्सल की सघनता = hdpi
टचस्क्रीन का टाइप = notouch
मुख्य टेक्स्ट इनपुट का तरीका = 12key

डिवाइस कॉन्फ़िगरेशन की तुलना, उपलब्ध वैकल्पिक संसाधनों से करके, Android यह चुनता है drawable-en-port के ड्रॉबल.

सिस्टम यह तय करता है कि नीचे दी गई चीज़ों के साथ कौनसे रिसॉर्स का इस्तेमाल करना है लॉजिक:

दूसरा डायग्राम. फ़्लोचार्ट, जिसमें यह बताया गया है कि Android, सबसे ज़्यादा मेल खाने वाला संसाधन.

  1. डिवाइस कॉन्फ़िगरेशन का विरोध करने वाली संसाधन फ़ाइलों को हटाएं.

    drawable-fr-rCA/ डायरेक्ट्री को हटा दिया गया है, क्योंकि यह en-GB स्थान-भाषा से मेल न खाता हो.

    drawable/
    drawable-en/
    drawable-fr-rCA/
    drawable-en-port/
    drawable-en-notouch-12key/
    drawable-port-ldpi/
    drawable-port-notouch-12key/
    

    अपवाद: स्क्रीन पिक्सल की सघनता का मतलब, उस क्वालीफ़ायर का इस्तेमाल करना है जो विरोधाभास की वजह से हटाया गया. डिवाइस की स्क्रीन की सघनता एचडीपीआई होने के बावजूद, drawable-port-ldpi/ को हटाया नहीं गया है, क्योंकि हर स्क्रीन की सघनता को मैच माना जाता है. ज़्यादा जानकारी के लिए, स्क्रीन के साथ काम करने की सुविधा के बारे में खास जानकारी देखें.

  2. सूची में सबसे ज़्यादा प्राथमिकता वाला क्वालीफ़ायर ढूंढें (टेबल 2). (एमसीसी से शुरू करें.)
  3. क्या किसी संसाधन डायरेक्ट्री में यह क्वालीफ़ायर शामिल है?
    • अगर नहीं, तो दूसरे चरण पर वापस जाएं और अगला क्वालीफ़ायर देखें. इस उदाहरण में, मेरा जवाब है "नहीं" भाषा का मापदंड पूरा होने तक.
    • अगर हां, तो चौथे चरण पर जाएं.
  4. उन संसाधन डायरेक्ट्री को हटाएं जिनमें यह क्वालीफ़ायर शामिल नहीं है. इस उदाहरण में, सिस्टम Next उन सभी डायरेक्ट्री को हटा देता है जिनमें भाषा का क्वालीफ़ायर शामिल नहीं है:
    drawable/
    drawable-en/
    drawable-en-port/
    drawable-en-notouch-12key/
    drawable-port-ldpi/
    drawable-port-notouch-12key/
    
    अभी तक किसी भी व्यक्ति ने चेक इन नहीं किया है

    अपवाद: अगर क्वालीफ़ायर स्क्रीन पिक्सल की सघनता के बारे में है, Android वह विकल्प चुनता है जो डिवाइस की स्क्रीन की सघनता से सबसे ज़्यादा मेल खाता है. आम तौर पर, Android बड़ी ओरिजनल इमेज को छोटा करके देखना पसंद करता है ओरिजनल इमेज. अधिक जानकारी के लिए, स्क्रीन करें साथ काम करने के बारे में खास जानकारी.

  5. दूसरे, तीन, और चार चरणों को तब तक दोहराएं, जब तक सिर्फ़ एक डायरेक्ट्री न बची रहे. इस उदाहरण में, स्क्रीन स्क्रीन की दिशा अगला मापदंड है, जिसके लिए मिलान उपलब्ध हैं. इसलिए, जो संसाधन स्क्रीन ओरिएंटेशन की जानकारी नहीं देते उन्हें हटा दिया जाता है:
    drawable-en/
    drawable-en-port/
    drawable-en-notouch-12key/
    
    अभी तक किसी भी व्यक्ति ने चेक इन नहीं किया है

    बाकी डायरेक्ट्री drawable-en-port है.

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

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

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

ध्यान दें: क्वालीफ़ायर (टेबल 2 में) की प्राथमिकता ज़्यादा अहम है डिवाइस से पूरी तरह मेल खाने वाले क्वालिफ़ायर की संख्या से ज़्यादा होता है. पिछले उदाहरण में, चौथे चरण में सूची में आखिरी विकल्प में तीन क्वालिफ़ायर मौजूद हैं जो डिवाइस से पूरी तरह मेल खाते हैं (ओरिएंटेशन, टचस्क्रीन का टाइप, और इनपुट का तरीका) में बताया जाता है. हालांकि, drawable-en में सिर्फ़ एक पैरामीटर है, जो (भाषा). हालांकि, इन दूसरे क्वालीफ़ायर की तुलना में भाषा की प्राथमिकता ज़्यादा है, इसलिए drawable-port-notouch-12key को हटा दिया गया है.