संसाधन हैं अतिरिक्त फ़ाइलें और स्थिर सामग्री जिनका उपयोग आपका कोड करता है, जैसे बिटमैप, लेआउट परिभाषाएं, यूज़र इंटरफ़ेस स्ट्रिंग, ऐनिमेशन निर्देश वगैरह.
ऐप्लिकेशन के संसाधनों को हमेशा अपने डिवाइस से बाहर करें, जैसे कि इमेज और स्ट्रिंग ताकि आप उनका रखरखाव स्वतंत्र रूप से कर सकें. साथ ही, डिवाइस कॉन्फ़िगरेशन को खास नाम वाली रिसॉर्स डायरेक्ट्री में ग्रुप करके. पर रनटाइम के दौरान, 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,
ज़्यादा जानकारी के लिए, ड्रॉ करने लायक संसाधन देखें. |
mipmap/ |
लॉन्चर आइकॉन की अलग-अलग डेंसिटी के लिए ड्रॉ करने लायक फ़ाइलें. मैनेज करने के बारे में ज़्यादा जानकारी पाने के लिए,
लॉन्चर आइकॉन के साथ mipmap/ फ़ोल्डर, देखें
ऐप्लिकेशन आइकन अंदर रखें
मिपमैप डायरेक्ट्री. |
layout/ |
यूज़र इंटरफ़ेस का लेआउट तय करने वाली एक्सएमएल फ़ाइलें. ज़्यादा जानकारी के लिए, लेआउट के बारे में जानकारी देने वाला संसाधन देखें. |
menu/ |
ऐसी एक्सएमएल फ़ाइलें जो ऐप्लिकेशन के मेन्यू के बारे में जानकारी देती हैं. जैसे, विकल्प मेन्यू, संदर्भ मेन्यू या सबमेन्यू. ज़्यादा जानकारी के लिए, मेन्यू संसाधन देखें. |
raw/ |
आर्बिट्रेरी फ़ाइलें, जिन्हें उनके मूल रूप में सेव किया जाना है. इन संसाधनों को बिना किसी बदलाव के
हालांकि, अगर आपको मूल फ़ाइल नाम और फ़ाइल की हैरारकी का ऐक्सेस चाहिए, तो
|
values/ |
ऐसी एक्सएमएल फ़ाइलें जिनमें स्ट्रिंग, पूर्णांक, और रंग जैसी सामान्य वैल्यू होती हैं. वहीं, हर संसाधन अपने एक्सएमएल एलिमेंट से तय होता है. इसलिए, फ़ाइल को नाम दिया जा सकता है और अलग-अलग संसाधन टाइप को एक ही फ़ाइल में रखें. हालांकि, साफ़ तौर पर कहा जाए, तो अलग-अलग फ़ाइलों में यूनीक रिसॉर्स टाइप शामिल करना चाहते हैं. उदाहरण के लिए, यहां कुछ फ़ाइलों के नाम दिए गए हैं इस डायरेक्ट्री में बनाए जा सकने वाले संसाधनों के लिए कन्वेंशन:
ज़्यादा जानकारी के लिए, स्ट्रिंग रिसॉर्स देखें. स्टाइल रिसॉर्स, और अलग-अलग तरह के संसाधन. |
xml/ |
ऐसी आर्बिट्ररी एक्सएमएल फ़ाइलें जिन्हें रनटाइम के दौरान, Resources.getXML() को कॉल करके पढ़ा जा सकता है. अलग-अलग एक्सएमएल कॉन्फ़िगरेशन फ़ाइलें
यहां सेव करें, जैसे कि Search से जुड़ा कॉन्फ़िगरेशन.
|
font/ |
TTF, OTF,
या टीटीसी या एक्सएमएल फ़ाइलें हैं जो
<font-family> एलिमेंट शामिल करें. इसके बारे में ज़्यादा जानकारी पाने के लिए,
फ़ॉन्ट संसाधन के रूप में देखें, तो
एक्सएमएल रिसॉर्स के तौर पर फ़ॉन्ट जोड़ें.
|
चेतावनी: संसाधन फ़ाइलों को कभी भी सीधे
res/
डायरेक्ट्री. इससे कंपाइलर की गड़बड़ी होती है.
अलग-अलग तरह के संसाधनों के बारे में ज़्यादा जानकारी के लिए, संसाधन टाइप की खास जानकारी देखें.
टेबल 1 में बताई गई सबडायरेक्ट्री में सेव किए गए संसाधन आपके डिफ़ॉल्ट होते हैं संसाधन. इसका मतलब है कि ये संसाधन आपके ऐप्लिकेशन के डिफ़ॉल्ट डिज़ाइन और कॉन्टेंट को तय करते हैं. हालांकि, Android पर काम करने वाले अलग-अलग तरह के डिवाइसों में, अलग-अलग तरह के संसाधनों की ज़रूरत पड़ सकती है.
उदाहरण के लिए, उन डिवाइसों के लिए अलग-अलग लेआउट रिसॉर्स दिए जा सकते हैं जिनका साइज़ सामान्य से बड़ा है ज़्यादा स्क्रीन का फ़ायदा लें. आपके पास अलग-अलग स्ट्रिंग रिसॉर्स भी देने का विकल्प होता है जो डिवाइस की भाषा सेटिंग के आधार पर आपके यूज़र इंटरफ़ेस के टेक्स्ट का अनुवाद करते हैं. उपलब्ध कराने के लिए डिवाइस को सुरक्षित रखने के लिए, कॉन्फ़िगरेशन के लिए, आपको अपने डिफ़ॉल्ट संसाधन के अलावा वैकल्पिक संसाधन देने होंगे संसाधन.
वैकल्पिक रिसॉर्स उपलब्ध कराना
ज़्यादातर ऐप्लिकेशन किसी डिवाइस पर काम करने के लिए वैकल्पिक संसाधन देते हैं कॉन्फ़िगरेशन. उदाहरण के लिए, अलग-अलग अलग-अलग भाषाओं के लिए, स्क्रीन डेंसिटी और वैकल्पिक स्ट्रिंग रिसॉर्स का इस्तेमाल करें. रनटाइम के दौरान, Android डिवाइस के मौजूदा कॉन्फ़िगरेशन का पता लगाता है और डिवाइस के सही संसाधन खोजें.
![](https://developer.android.com/static/images/resources/resource_devices_diagram2.png?authuser=8&hl=hi)
पहला डायग्राम. दो डिवाइस, स्क्रीन के साइज़ के आधार पर अलग-अलग लेआउट संसाधनों का इस्तेमाल कर रहे हैं.
अगर आपको संसाधनों के सेट के लिए कॉन्फ़िगरेशन से जुड़े विकल्प तय करने हैं, तो यह तरीका अपनाएं:
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,
हर संसाधन का वह वर्शन जो मौजूदा डिवाइस से सबसे अच्छी तरह मेल खाता हो. इसके लिए,
कॉन्फ़िगरेशन की जानकारी, संसाधन डायरेक्ट्री के नाम में क्वालीफ़ायर के साथ दी गई है.
चेतावनी: वैकल्पिक संसाधन तय करते समय, पक्का करें कि
साथ ही, संसाधन को डिफ़ॉल्ट कॉन्फ़िगरेशन में तय करें. ऐसा न करने पर, आपके ऐप्लिकेशन को रनटाइम का सामना करना पड़ सकता है
अपवाद तब लागू होता है, जब डिवाइस कॉन्फ़िगरेशन में बदलाव करता है. उदाहरण के लिए, यदि आप
values
के बजाय, values-en
है, तो आपके ऐप्लिकेशन को
जब उपयोगकर्ता सिस्टम की डिफ़ॉल्ट भाषा बदलता है, तब Resource Not Found
अपवाद.
दूसरी टेबल में, मान्य कॉन्फ़िगरेशन क्वालीफ़ायर दिए गए हैं. इन्हें प्राथमिकता के हिसाब से क्रम में लगाया गया है. आप हर क्वालिफ़ायर को डैश से अलग करके, एक डायरेक्ट्री के नाम में कई क्वालिफ़ायर जोड़ें. अगर आपको किसी रिसॉर्स डायरेक्ट्री के लिए एक से ज़्यादा क्वालिफ़ायर हैं, तो आपको उन्हें डायरेक्ट्री के नाम में उसी क्रम में जोड़ना होगा टेबल में दी गई हैं.
दूसरी टेबल. कॉन्फ़िगरेशन क्वालीफ़ायर नाम.
कॉन्फ़िगरेशन | क्वालिफ़ायर वैल्यू | ब्यौरा |
---|---|---|
एमसीसी और एमएनसी | उदाहरण:mcc310
mcc208-mnc00
|
मोबाइल देश का कोड (एमसीसी), वैकल्पिक तौर पर मोबाइल नेटवर्क कोड (MNC)
पहले से मौजूद है. उदाहरण के लिए, किसी भी कैरियर पर अगर डिवाइस किसी रेडियो कनेक्शन (यानी, यह एक GSM फ़ोन है) का इस्तेमाल करता है, तो एमसीसी और MNC की वैल्यू सिम कार्ड से बाहर निकालता है. उदाहरण के लिए, आप अकेले एमसीसी का इस्तेमाल करके भी, देश के हिसाब से कानूनी दस्तावेज़ को शामिल कर सकते हैं संसाधन भी मिल सकते हैं. अगर आपको सिर्फ़ भाषा के आधार पर जानकारी देनी है, तो इसके बजाय, भाषा, स्क्रिप्ट (ज़रूरी नहीं), और क्षेत्र (ज़रूरी नहीं) क्वालीफ़ायर का इस्तेमाल करें. यदि आप MCC और एमएनसी क्वालीफ़ायर, इसे सावधानी से इस्तेमाल करें और जांच लें कि यह उम्मीद के मुताबिक काम कर रहा हो.
|
भाषा, स्क्रिप्ट (ज़रूरी नहीं), और इलाका (ज़रूरी नहीं) | उदाहरण: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 वाले इलाके के कोड के हिसाब से (पहले
लोअरकेस कोड केस-सेंसिटिव (बड़े और छोटे अक्षरों में अंतर) नहीं होते हैं. Android 7.0 (एपीआई लेवल 24) ने बीसीपी 47 भाषा वाले टैग होते हैं, जिनका इस्तेमाल भाषा की पहचान करने के लिए किया जा सकता है- और इलाके के हिसाब से संसाधन बनाए जा सकते हैं. भाषा का टैग कई चीज़ों के क्रम से बना होता है एक या ज़्यादा सब-टैग हैं, जिनमें से हर एक कुल टैग से पहचानी गई भाषा. इसके बारे में ज़्यादा जानकारी पाने के लिए, भाषा के टैग के लिए, भाषा की पहचान करने के लिए टैग देखें. BCP 47 भाषा टैग का इस्तेमाल करने के लिए,
ऐप्लिकेशन के चालू रहने के दौरान भाषा का टैग बदल सकता है, अगर उपयोगकर्ता, सिस्टम की सेटिंग में अपनी भाषा बदलते हैं. इसके बारे में जानकारी के लिए इससे रनटाइम के दौरान आपके ऐप्लिकेशन पर क्या असर पड़ेगा. इसके बारे में जानने के लिए, हैंडल करें कॉन्फ़िगरेशन में हुए बदलाव. अपने ऐप्लिकेशन को अन्य भाषाओं में स्थानीय भाषा में लिखने के बारे में पूरी जानकारी पाने के लिए, ऐप्लिकेशन को स्थानीय भाषा में लिखना लेख पढ़ें.
|
लेआउट की दिशा | ldrtl ldltr |
आपके ऐप्लिकेशन के लेआउट की दिशा. यह किसी भी संसाधन पर लागू हो सकता है, जैसे लेआउट, ड्रॉएबल या वैल्यू. उदाहरण के लिए, यदि आप अरबी भाषा के लिए कोई विशिष्ट लेआउट प्रदान करना चाहते हैं और किसी अन्य "दाएं से बाएं" के लिए सामान्य लेआउट भाषा, जैसे फ़ारसी या हिब्रू, तो आप नीचे दी गई डायरेक्ट्री का इस्तेमाल करते हैं:
ध्यान दें: दाएं से बाएं लेआउट की सुविधाएं चालू करने के लिए
अपने ऐप्लिकेशन के लिए, आपको एपीआई लेवल 17 में जोड़ा गया. |
सबसे कम चौड़ाई की स्क्रीन सेट करें | sw<N>dp उदाहरण: sw320dp sw600dp sw720dp वगैरह |
किसी ऐप्लिकेशन के लिए उपलब्ध स्क्रीन क्षेत्र का सबसे छोटा आयाम.
खास तौर पर, ऐप्लिकेशन विंडो का
उदाहरण के लिए, अगर आपके लेआउट के लिए स्क्रीन का सबसे छोटा डाइमेंशन ज़रूरी है
क्षेत्र हर समय कम से कम 600 dp हो, तो फिर आप इस क्वालीफ़ायर का इस्तेमाल
सबसे छोटी चौड़ाई का इस्तेमाल करके, सामान्य स्क्रीन साइज़ उपयोगी होता है, क्योंकि आम तौर पर स्क्रीन की चौड़ाई, ड्राइविंग के असर की लेआउट डिज़ाइन किया जा रहा है. यूज़र इंटरफ़ेस (यूआई) अक्सर वर्टिकल स्क्रोल करता है, लेकिन यह काफ़ी मुश्किल होता है उस कम से कम जगह पर कंस्ट्रेंट जिसकी इसे हॉरिज़ॉन्टल तौर पर ज़रूरत है. उपलब्ध चौड़ाई यह तय करने में भी मुख्य कारक होता है कि एक पैनल वाले लेआउट का इस्तेमाल करना है या नहीं हैंडसेट या टैबलेट के लिए मल्टीपैन लेआउट. इसलिए, ऐसा हो सकता है कि आप हर डिवाइस की सबसे छोटी चौड़ाई कितनी हो. डिवाइस की सबसे छोटी चौड़ाई, स्क्रीन की सजावट का ध्यान रखती है और सिस्टम यूज़र इंटरफ़ेस (यूआई) की इमेज. उदाहरण के लिए, अगर डिवाइस में वह स्क्रीन जिसकी सबसे छोटी चौड़ाई के ऐक्सिस पर स्पेस होता है, सिस्टम सबसे छोटी चौड़ाई को स्क्रीन के असल साइज़ से कम दिखाता है, क्योंकि वे स्क्रीन पिक्सल हैं जो आपके यूज़र इंटरफ़ेस (यूआई) के लिए उपलब्ध नहीं हैं. यहां सामान्य स्क्रीन साइज़ के लिए कुछ वैल्यू इस्तेमाल की जा सकती हैं:
जब आपका ऐप्लिकेशन,
तो सिस्टम, एपीआई लेवल 13 में जोड़ा गया.
इस क्वालीफ़ायर का इस्तेमाल करके अलग-अलग स्क्रीन डिज़ाइन करने के बारे में ज़्यादा जानकारी के लिए, देखें व्यू के साथ रिस्पॉन्सिव/अडैप्टिव डिज़ाइन. |
उपलब्ध चौड़ाई और ऊंचाई | w<N>dp h<N>dp उदाहरण: w720dp w1024dp h720dp h1024dp वगैरह |
इससे पता चलता है कि स्क्रीन की कम से कम चौड़ाई या ऊंचाई कितनी है ( चौड़ाई और ऊंचाई की उपलब्ध जानकारी, अक्सर यह तय करने में मददगार होती है कि मल्टीपेन का इस्तेमाल करना है या नहीं लेआउट, क्योंकि टैबलेट डिवाइस पर भी आपको अक्सर एक जैसा मल्टीपैन लेआउट नहीं चाहिए पोर्ट्रेट ओरिएंटेशन के लिए, जैसा आप लैंडस्केप के लिए करते हैं. इसलिए, इनका इस्तेमाल यह तय करने के लिए किया जा सकता है कि लेआउट के लिए, स्क्रीन के दोनों साइज़ के बजाय कम से कम चौड़ाई और/या ऊंचाई ज़रूरी है और ओरिएंटेशन क्वालीफ़ायर को एक साथ दिखाता है. जब आपका ऐप्लिकेशन, अलग-अलग वैल्यू वाली एक से ज़्यादा रिसॉर्स डायरेक्ट्री उपलब्ध कराता है इन कॉन्फ़िगरेशन के लिए, सिस्टम सबसे नज़दीक वाली कॉन्फ़िगरेशन का इस्तेमाल करता है. डिवाइस की मौजूदा स्क्रीन की चौड़ाई. सबसे नज़दीकी का पता लगाने के लिए, अंतर जोड़े जाते हैं स्क्रीन की असल चौड़ाई और बताई गई चौड़ाई के बीच के फ़र्क़ को देखें अनिर्दिष्ट ऊंचाई और चौड़ाई के साथ, वास्तविक स्क्रीन ऊंचाई और निर्दिष्ट ऊंचाई जिसकी वैल्यू 0 है. इस वैल्यू में वह इलाका शामिल नहीं है जहां मौजूद है
विंडो इनसेट का इस्तेमाल किया जाता है. इसलिए, अगर डिवाइस में
डिसप्ले के किनारों पर स्थायी यूज़र इंटरफ़ेस (यूआई) एलिमेंट. चौड़ाई और ऊंचाई की वैल्यू
यह असली स्क्रीन के डाइमेंशन से छोटा होता है. भले ही, ऐप्लिकेशन एक से दूसरे किनारे तक दिखता हो
इसका उपयोग कर रहा है
स्क्रीन की कुछ ऐसी वर्टिकल सजावटें जिन्हें ठीक नहीं किया गया है (जैसे कि फ़ोन स्टेटस बार को फ़ुल स्क्रीन में देखने के बाद, उसे यहां नहीं गिना जाता, न ही टाइटल बार या ऐक्शन बार की तरह ही विंडो की सजावट है, इसलिए ऐप्लिकेशन को उसमें तय जगह से थोड़ा कम स्पेस होता है. ध्यान दें: सिस्टम वह संसाधन चुनता है जो चौड़ाई और ऊंचाई. इसलिए, दोनों के बारे में बताने वाले संसाधन को प्राथमिकता दी जाती है जो इनमें से किसी एक के बारे में बताती हो. उदाहरण के लिए, अगर असल स्क्रीन की चौड़ाई 720 dp है 1280 dp उच्च और एक संसाधन w720dp के साथ योग्य है और दूसरा w700dp-h1200dp, बाद वाले विकल्प को चुना जाता है, भले ही पहले वाला विकल्प उससे पूरी तरह मेल खाता हो यह तय करता है. एपीआई लेवल 13 में जोड़ा गया.
इस क्वालीफ़ायर का इस्तेमाल करके अलग-अलग स्क्रीन डिज़ाइन करने के बारे में ज़्यादा जानकारी के लिए, देखें व्यू के साथ रिस्पॉन्सिव/अडैप्टिव डिज़ाइन. |
स्क्रीन का साइज़ |
small normal large xlarge
|
ध्यान दें: साइज़ क्वालीफ़ायर का इस्तेमाल करना इसका मतलब यह नहीं है कि संसाधन सिर्फ़ उस साइज़ की स्क्रीन के लिए हैं. अगर आपको क्वालिफ़ायर के साथ ऐसे वैकल्पिक संसाधन उपलब्ध कराने जो मौजूदा डिवाइस से बेहतर मेल खाते हों कॉन्फ़िगरेशन के लिए, सिस्टम उन संसाधनों का उपयोग कर सकता है जो सबसे बढ़िया मैच होते हैं. चेतावनी: अगर आपके सभी संसाधन साइज़ का इस्तेमाल करते हैं
यह क्वालीफ़ायर, जो सिस्टम की मौजूदा स्क्रीन से ज़्यादा बड़ा है
उनका इस्तेमाल नहीं करता और रनटाइम के दौरान आपका ऐप्लिकेशन क्रैश हो जाता है. उदाहरण के लिए, ऐसा तब होता है, जब सभी लेआउट
संसाधनों को एपीआई लेवल 4 में जोड़ा गया.
अधिक जानकारी के लिए, स्क्रीन करें साथ काम करने के बारे में खास जानकारी. |
स्क्रीन का आसपेक्ट रेशियो |
long notlong
|
एपीआई लेवल 4 में जोड़ा गया. यह पूरी तरह से स्क्रीन के आसपेक्ट रेशियो (लंबाई-चौड़ाई का अनुपात) पर आधारित होता है (
|
राउंड स्क्रीन |
round notround
|
एपीआई लेवल 23 में जोड़ा गया.
|
वाइड कलर गेमट |
widecg nowidecg
|
एपीआई लेवल 26 में जोड़ा गया.
|
हाई डाइनैमिक रेंज (एचडीआर) |
highdr lowdr
|
एपीआई लेवल 26 में जोड़ा गया.
|
स्क्रीन ओरिएंटेशन |
port land
|
यह आपके ऐप्लिकेशन के चालू रहने के दौरान बदल सकता है, अगर उपयोगकर्ता स्क्रीन. रनटाइम के दौरान आपके ऐप्लिकेशन पर इसका क्या असर पड़ता है, इसके बारे में जानकारी के लिए यहां देखें कॉन्फ़िगरेशन के बदलाव मैनेज करें.
|
यूज़र इंटरफ़ेस (यूआई) मोड |
car desk television appliance watch vrheadset
|
एपीआई लेवल 8 में जोड़ा गया; एपीआई 13 में जोड़ा गया टेलिविज़न; एपीआई 20 में जोड़ी गई स्मार्टवॉच. इस बारे में जानकारी के लिए कि डिवाइस को लगाने पर या आपका ऐप्लिकेशन कैसे प्रतिक्रिया दे सकता है किसी डॉक से हटाया गया है, तो यह तय करना और मॉनिटर करना डॉकिंग की स्थिति और टाइप. यह आपके ऐप्लिकेशन के चालू रहने के दौरान बदल सकता है, अगर उपयोगकर्ता ने डिवाइस को
डॉक. इनमें से कुछ मोड को चालू या बंद किया जा सकता है
|
नाइट मोड |
night notnight
|
एपीआई लेवल 8 में जोड़ा गया. नाइट मोड चालू रहने के दौरान, यह सेटिंग बदल सकती है
ऑटो मोड (डिफ़ॉल्ट) चालू करता है, जिसमें दिन के समय के आधार पर मोड बदल जाता है. इस सुविधा को चालू किया जा सकता है
या |
स्क्रीन पिक्सल की सघनता (डीपीआई) |
ldpi mdpi hdpi xhdpi xxhdpi xxxhdpi nodpi tvdpi anydpi nnndpi
|
छह मुख्य डेंसिटी के बीच स्केलिंग अनुपात 3:4:6:8:12:16 होता है (इसे अनदेखा करने के लिए tvdpi सघनता). इसलिए, ldpi में 9x9 का बिटमैप mdpi में 12x12, hdpi में 18x18, xhdpi में 24x24 होता है, और यह क्रम इसी तरह जारी रहता है. ध्यान दें: सघनता क्वालीफ़ायर का इस्तेमाल करने का यह मतलब नहीं है कि संसाधन सिर्फ़ उस सघनता वाली स्क्रीन के लिए हैं. अगर आपने Google Analytics 4 प्रॉपर्टी क्वालीफ़ायर वाले संसाधन, जो मौजूदा डिवाइस कॉन्फ़िगरेशन से बेहतर तरीके से मेल खाते हैं, सिस्टम इनका इस्तेमाल करता है कौनसा संसाधन सबसे ज़्यादा मिलते-जुलते हैं. इस बारे में ज़्यादा जानकारी कि Android की अलग-अलग स्क्रीन डेंसिटी को कैसे मैनेज करें और आपके बिटमैप को मौजूदा डेंसिटी के हिसाब से स्केल कर सकता है, स्क्रीन के साथ काम करने की सुविधा के बारे में खास जानकारी. |
टचस्क्रीन का टाइप |
notouch finger
|
|
कीबोर्ड की उपलब्धता |
keysexposed keyshidden keyssoft
|
अगर आपने अगर उपयोगकर्ता कोई हार्डवेयर खोलता है, तो आपके ऐप्लिकेशन के चलने के दौरान यह स्थिति बदल सकती है कीबोर्ड. रनटाइम के दौरान आपके ऐप्लिकेशन पर इसका क्या असर पड़ता है, इसके बारे में जानकारी के लिए यहां देखें कॉन्फ़िगरेशन के बदलाव मैनेज करें.
|
टेक्स्ट इनपुट का मुख्य तरीका |
nokeys qwerty 12key
|
|
नेविगेशन कुंजी की उपलब्धता |
navexposed navhidden
|
अगर उपयोगकर्ता नेविगेशन को दिखाता है, तो आपके ऐप्लिकेशन के चालू रहने के दौरान यह बदल सकता है बटन का इस्तेमाल करें. रनटाइम के दौरान आपके ऐप्लिकेशन पर इसका क्या असर पड़ता है, इसके बारे में जानकारी के लिए यहां देखें कॉन्फ़िगरेशन के बदलाव मैनेज करें.
|
टच किए बिना नेविगेशन की मुख्य विधि |
nonav dpad trackball wheel
|
|
प्लैटफ़ॉर्म वर्शन (एपीआई लेवल) | उदाहरण:v3 v4 v7 वगैरह |
डिवाइस के साथ काम करने वाला एपीआई लेवल. जैसे, एपीआई लेवल के लिए |
ध्यान दें: 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
के ड्रॉबल.
सिस्टम यह तय करता है कि नीचे दी गई चीज़ों के साथ कौनसे रिसॉर्स का इस्तेमाल करना है लॉजिक:
![](https://developer.android.com/static/images/resources/res-selection-flowchart.png?authuser=8&hl=hi)
दूसरा डायग्राम. फ़्लोचार्ट, जिसमें यह बताया गया है कि Android, सबसे ज़्यादा मेल खाने वाला संसाधन.
- डिवाइस कॉन्फ़िगरेशन का विरोध करने वाली संसाधन फ़ाइलों को हटाएं.
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). (एमसीसी से शुरू करें.)
- क्या किसी संसाधन डायरेक्ट्री में यह क्वालीफ़ायर शामिल है?
- अगर नहीं, तो दूसरे चरण पर वापस जाएं और अगला क्वालीफ़ायर देखें. इस उदाहरण में, मेरा जवाब है "नहीं" भाषा का मापदंड पूरा होने तक.
- अगर हां, तो चौथे चरण पर जाएं.
- उन संसाधन डायरेक्ट्री को हटाएं जिनमें यह क्वालीफ़ायर शामिल नहीं है. इस उदाहरण में, सिस्टम
Next उन सभी डायरेक्ट्री को हटा देता है जिनमें भाषा का क्वालीफ़ायर शामिल नहीं है:
drawable/drawable-en/ drawable-en-port/ drawable-en-notouch-12key/drawable-port-ldpi/drawable-port-notouch-12key/अपवाद: अगर क्वालीफ़ायर स्क्रीन पिक्सल की सघनता के बारे में है, Android वह विकल्प चुनता है जो डिवाइस की स्क्रीन की सघनता से सबसे ज़्यादा मेल खाता है. आम तौर पर, Android बड़ी ओरिजनल इमेज को छोटा करके देखना पसंद करता है ओरिजनल इमेज. अधिक जानकारी के लिए, स्क्रीन करें साथ काम करने के बारे में खास जानकारी.
- दूसरे, तीन, और चार चरणों को तब तक दोहराएं, जब तक सिर्फ़ एक डायरेक्ट्री न बची रहे. इस उदाहरण में, स्क्रीन
स्क्रीन की दिशा अगला मापदंड है, जिसके लिए मिलान उपलब्ध हैं.
इसलिए, जो संसाधन स्क्रीन ओरिएंटेशन की जानकारी नहीं देते उन्हें हटा दिया जाता है:
drawable-en/drawable-en-port/drawable-en-notouch-12key/बाकी डायरेक्ट्री
drawable-en-port
है.
हालांकि, अनुरोध किए गए हर संसाधन के लिए यह प्रक्रिया अपनाई जाती है, लेकिन सिस्टम कुछ पहलू शामिल हैं. ऐसा ही एक ऑप्टिमाइज़ेशन यह है कि डिवाइस कॉन्फ़िगरेशन की जानकारी मिल जाने के बाद, उन वैकल्पिक संसाधनों को हटा देना चाहिए जो कभी मेल नहीं खा सकते. उदाहरण के लिए, अगर कॉन्फ़िगरेशन भाषा अंग्रेज़ी है, इसके बाद कोई भी ऐसी संसाधन डायरेक्ट्री, जिसमें भाषा का क्वालीफ़ायर इस पर सेट हो अंग्रेज़ी के अलावा किसी अन्य चीज़ को जाँचे गए संसाधनों के पूल में कभी शामिल नहीं किया जाता (हालांकि इसमें भाषा क्वालिफ़ायर के बिना संसाधन डायरेक्ट्री भी शामिल होती है).
स्क्रीन के साइज़ क्वालीफ़ायर के आधार पर संसाधनों को चुनते समय, सिस्टम संसाधनों का इस्तेमाल करता है इसे वर्तमान स् क्रीन से छोटी स् क्रीन के लिए डिज़ाइन किया जाता है, जब बेहतर मिलान वाला कोई संसाधन न हो. उदाहरण के लिए, अगर ज़रूरी हो, तो बड़े साइज़ की स्क्रीन, सामान्य साइज़ वाली स्क्रीन के संसाधनों का इस्तेमाल करती है.
हालांकि, अगर
सिर्फ़ उपलब्ध संसाधन, मौजूदा स्क्रीन से ज़्यादा हैं, यानी सिस्टम
उनका इस्तेमाल नहीं करता. साथ ही, अगर डिवाइस में कोई दूसरा संसाधन मौजूद नहीं है, तो आपका ऐप्लिकेशन क्रैश हो जाता है
कॉन्फ़िगरेशन. उदाहरण के लिए, ऐसा तब होता है, जब सभी लेआउट रिसॉर्स को xlarge
क्वालीफ़ायर के साथ टैग किया जाता है,
लेकिन डिवाइस के साइज़ की स्क्रीन सामान्य हो.
ध्यान दें: क्वालीफ़ायर (टेबल 2 में) की प्राथमिकता ज़्यादा अहम है
डिवाइस से पूरी तरह मेल खाने वाले क्वालिफ़ायर की संख्या से ज़्यादा होता है. पिछले उदाहरण में, चौथे चरण में
सूची में आखिरी विकल्प में तीन क्वालिफ़ायर मौजूद हैं जो डिवाइस से पूरी तरह मेल खाते हैं (ओरिएंटेशन,
टचस्क्रीन का टाइप, और इनपुट का तरीका) में बताया जाता है. हालांकि, drawable-en
में सिर्फ़ एक पैरामीटर है, जो
(भाषा). हालांकि, इन दूसरे क्वालीफ़ायर की तुलना में भाषा की प्राथमिकता ज़्यादा है, इसलिए
drawable-port-notouch-12key
को हटा दिया गया है.