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

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

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

साइज़ बदलने की सुविधा

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

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

✓ ऐसा करें

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

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

✗ ऐसा न करें

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

ओरिएंटेशन

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

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

✓ ऐसा करें

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

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

✗ ऐसा न करें

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

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

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

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

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

✓ ऐसा करें

अपने ऐप्लिकेशन को स्क्रीन पर फ़िट करने के लिए अडजस्ट करें. भले ही, स्क्रीन के डाइमेंशन अलग-अलग हों.

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

✗ ऐसा न करें

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

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

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

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

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

✓ ऐसा करें

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

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

✗ ऐसा न करें

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

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

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

✓ ऐसा करें

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

✗ ऐसा न करें

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

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

Compose

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

✓ ऐसा करें

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

✗ ऐसा न करें

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

Material 3 के हिसाब से बदलने वाली लाइब्रेरी बनाना

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

✓ ऐसा करें

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

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

एक ही चीज़ बार-बार करने की ज़रूरत नहीं. Jetpack Compose की सभी लाइब्रेरी से, डेवलपर को बेहतर ढंग से काम करने में मदद मिलती है.

लेआउट

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

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

✓ ऐसा करें

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

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

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

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

✗ ऐसा न करें: विंडो के साइज़ के हिसाब से लेआउट को बड़ा किया गया हो.

इनपुट डिवाइस

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

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

✓ ऐसा करें

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

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

✗ ऐसा न करें

इनपुट के अन्य तरीकों को इस्तेमाल करने की सुविधा न हटाएं. सुलभता से जुड़ी समस्याएं न पैदा करें.

खास जानकारी

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

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

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