ज़रूरत के हिसाब से क्या करें और क्या न करें

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

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

रीसाइज़ करने की सुविधा

अडैप्टिव ऐप्लिकेशन में, ऐप्लिकेशन का साइज़ बदलने और मल्टी-विंडो मोड की सुविधा काम करती है.

<activity> और <application> मेनिफ़ेस्ट एलिमेंट के resizeableActivity एट्रिब्यूट की मदद से, Android 11 (एपीआई लेवल 30) और इससे पहले के वर्शन पर मल्टी‑विंडो मोड को चालू या बंद किया जा सकता है. Android 12 (एपीआई लेवल 31) और इसके बाद के वर्शन पर, बड़ी स्क्रीन वाले डिवाइसों में मल्टी-विंडो मोड काम करता है. भले ही, ऐप्लिकेशन में इस मोड के लिए ज़रूरी एट्रिब्यूट मौजूद न हो. ज़्यादा जानकारी के लिए, मल्टी-विंडो मोड की सुविधा लेख पढ़ें.

✓ ये काम करें

अपने ऐप्लिकेशन में मल्टी-विंडो और मल्टीटास्किंग की सुविधा चालू करें. इससे लोगों को ज़्यादा आसानी से काम करने में मदद मिलेगी और वे संतुष्ट रहेंगे.

अगर आपका ऐप्लिकेशन, 24 से कम एपीआई लेवल को टारगेट करता है, तो resizeableActivity="true" सेट करें; अगर ऐसा नहीं है, तो इसे भूल जाएं—यह Android 7.0 (एपीआई लेवल 24) और इसके बाद के वर्शन पर डिफ़ॉल्ट रूप से true होता है.

✗ ऐसा न करें

किसी भी एपीआई लेवल के लिए resizeableActivity="false" सेट न करें. अपने ऐप्लिकेशन को उन इस्तेमाल के उदाहरणों से बाहर न रखें जिनमें मल्टी-विंडो मोड शामिल है.

ओरिएंटेशन

अनुकूलन करने वाले ऐप्लिकेशन, डिसप्ले के साइज़ या विंडो मोड के बावजूद पोर्ट्रेट और लैंडस्केप स्क्रीन की दिशा के साथ काम करते हैं.

screenOrientation मेनिफ़ेस्ट सेटिंग, गतिविधि के ओरिएंटेशन को सीमित करती है.

✓ ये काम करें

अपने ऐप्लिकेशन मेनिफ़ेस्ट से screenOrientation सेटिंग हटाएं.

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

✗ ऐसा न करें

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

लेटरबॉक्स वाले ऐप्लिकेशन, टैबलेट, फ़ोल्ड किए जा सकने वाले डिवाइसों, और ChromeOS डिवाइसों के लिए Google Play पर कम दिखते हैं.

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

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

minAspectRatio और maxAspectRatio मेनिफ़ेस्ट सेटिंग, आपके ऐप्लिकेशन के आसपेक्ट रेशियो को हार्ड‑कोड की गई वैल्यू तक सीमित करती हैं.

✓ ये काम करें

अपने ऐप्लिकेशन को डिसप्ले के हिसाब से अडजस्ट करें, भले ही डाइमेंशन कुछ भी हों.

अपने ऐप्लिकेशन के मेनिफ़ेस्ट से minAspectRatio और maxAspectRatio सेटिंग हटाएं. इसके अलावा, यह भी पक्का करें कि आपके ऐप्लिकेशन का साइज़ बदला जा सकता हो और उसका आसपेक्ट रेशियो (लंबाई-चौड़ाई का अनुपात) अपने-आप ठीक हो जाता हो (साइज़ बदलने की सुविधा सेक्शन देखें).

✗ ऐसा न करें

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

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

विंडो का साइज़

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

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

✓ ये काम करें

विंडो के साइज़ के आधार पर, अपने ऐप्लिकेशन की विंडो के साइज़ का आकलन करें.

विंडो के साइज़ क्लास का पता लगाने के लिए, Compose Material 3 की अडैप्टिव लाइब्रेरी के currentWindowAdaptiveInfoV2() टॉप‑लेवल फ़ंक्शन का इस्तेमाल करें. यह फ़ंक्शन, अब काम न करने वाले currentWindowAdaptiveInfo() फ़ंक्शन की जगह लेता है. ज़्यादा जानकारी के लिए, अनुकूलित ऐप्लिकेशन बनाना लेख पढ़ें.

✗ ऐसा न करें

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

बंद किए गए एपीआई

पुराने प्लैटफ़ॉर्म एपीआई, ऐप्लिकेशन विंडो को सही तरीके से मेज़र नहीं करते हैं. कुछ डिवाइस की स्क्रीन को मेज़र करते हैं, तो कुछ सिस्टम डेकोर को शामिल नहीं करते हैं.

✓ ये काम करें

ऐप्लिकेशन की विंडो का साइज़ पाने के लिए, WindowManager#getCurrentWindowMetrics() और WindowMetrics#getBounds() का इस्तेमाल करें. डिसप्ले डेंसिटी पाने के लिए, WindowMetrics#getDensity() का इस्तेमाल करें.

✗ ऐसा न करें

विंडो का साइज़ तय करने के लिए, अब काम नहीं करने वाले Display एपीआई का इस्तेमाल न करें:

  • getSize(): Android 11 (एपीआई लेवल 30) में काम नहीं करता
  • getMetrics(): Android 11 (एपीआई लेवल 30) में काम नहीं करता
  • getRealSize(): Android 12 (एपीआई लेवल 31) में बंद कर दिया गया है
  • getRealMetrics(): Android 12 (एपीआई लेवल 31) में बंद कर दिया गया है

लिखें

Jetpack Compose को अडैप्टिव यूज़र इंटरफ़ेस (यूआई) डेवलपमेंट के लिए डिज़ाइन किया गया है. कोई एक्सएमएल, कोई लेआउट फ़ाइल, और कोई संसाधन क्वालिफ़ायर नहीं है. सिर्फ़ Kotlin पर आधारित, स्टेटलेस कंपोज़ेबल, जैसे कि Column, Row, और Box, जो आपके यूज़र इंटरफ़ेस (यूआई) के बारे में बताते हैं. साथ ही, मॉडिफ़ायर, जैसे कि offset, padding, और size, जो यूज़र इंटरफ़ेस (यूआई) के एलिमेंट में व्यवहार जोड़ते हैं.

✓ ये काम करें

Compose का इस्तेमाल करके बनाएं. नई सुविधाओं और रिलीज़ के बारे में अप-टू-डेट रहें.

✗ ऐसा न करें

पुरानी टेक्नोलॉजी पर भरोसा न करें. अपने ऐप्लिकेशन को पुराना न होने दें.

Compose Material 3 अडैप्टिव लाइब्रेरी

Compose Material 3 Adaptive लाइब्रेरी, ऐसे कॉम्पोनेंट और एपीआई उपलब्ध कराती है जिनकी मदद से अडैप्टिव ऐप्लिकेशन बनाए जा सकते हैं.

✓ ये काम करें

अपने ऐप्लिकेशन को अडैप्टिव बनाने के लिए, इन एपीआई का इस्तेमाल करें:

  • NavigationSuiteScaffold: ऐप्लिकेशन की विंडो के साइज़ क्लास के हिसाब से, नेविगेशन बार और नेविगेशन रेल के बीच स्विच करता है.
  • ListDetailPaneScaffold: यह सूची की जानकारी कैननिकल लेआउट लागू करता है. यह लेआउट को ऐप्लिकेशन विंडो के साइज़ के हिसाब से अडजस्ट करता है.
  • SupportingPaneScaffold: इससे कैननिकल लेआउट के साथ-साथ, सपोर्टिंग पैन भी लागू होता है.
✗ ऐसा न करें

पुरानी कला को नए तरीके से न बनाएं. Jetpack Compose की सभी लाइब्रेरी से, डेवलपर को मिलने वाले फ़ायदों का पूरा फ़ायदा पाएं.

लेआउट

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

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

✓ ये काम करें

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

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

✓ ऐसा करें: दो पैनल वाले लेआउट में व्यवस्थित की गई गतिविधियों की सूची बनाएं और उनके बारे में पूरी जानकारी दें.
✗ ऐसा न करें

अगर कॉन्टेंट पैन का इस्तेमाल नहीं किया जा रहा है, तो सिर्फ़ यूज़र इंटरफ़ेस (यूआई) एलिमेंट को खींचकर, डिसप्ले के लिए उपलब्ध जगह को न भरें. टेक्स्ट की लंबी लाइनों को पढ़ना मुश्किल होता है. खींचे गए बटन, खराब तरीके से डिज़ाइन किए गए लगते हैं. अगर Modifier.fillMaxWidth का इस्तेमाल किया जाता है, तो यह न मान लें कि यह सभी डिसप्ले साइज़ के लिए सही तरीका है.

✗ ऐसा न करें: विंडो को बड़ा करने पर लेआउट स्ट्रेच हो जाता है.

इनपुट डिवाइस

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

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

✓ ये काम करें

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

Jetpack Material 3 लाइब्रेरी का इस्तेमाल करके, उपयोगकर्ताओं को स्टाइलस का इस्तेमाल करके किसी भी TextField कॉम्पोनेंट में लिखने की सुविधा दें.

✗ ऐसा न करें

इनपुट के वैकल्पिक तरीकों को इस्तेमाल करना मुश्किल न बनाएं. ऐक्सेसिबिलिटी से जुड़ी समस्याएं न हों.

खास जानकारी

  • Compose और Material 3 अडैप्टिव लाइब्रेरी की मदद से ऐप्लिकेशन बनाना
  • विंडो के साइज़ की क्लास के आधार पर लेआउट
  • कई पैन वाले लेआउट बनाना
  • अपने ऐप्लिकेशन को फिर से साइज़ करने की सुविधा देना
  • गतिविधि के ओरिएंटेशन को कभी लॉक न करें
  • आस्पेक्ट रेशियो (लंबाई-चौड़ाई का अनुपात) पर पाबंदी न लगाएं
  • टच के अलावा अन्य इनपुट का इस्तेमाल करने की सुविधा
  • पाबंदी वाले एपीआई इस्तेमाल न करें

✓ उपयोगकर्ताओं की उम्मीदों के मुताबिक काम करें: अपने ऐप्लिकेशन को अलग-अलग डिवाइसों के लिए ऑप्टिमाइज़ करें, ताकि लोग हर दिन इसका इस्तेमाल कर सकें.

✗ इंतज़ार न करें. आज ही शुरू करें!