अडैप्टिव ऐप्लिकेशन, सभी साइज़ के डिसप्ले पर काम करते हैं. जैसे, डिवाइस की पूरी स्क्रीन, मल्टी-विंडो मोड में साइज़ बदलने वाली विंडो, पोर्ट्रेट और लैंडस्केप ओरिएंटेशन, और फ़ोल्ड किए जा सकने वाले डिवाइसों के फ़ोल्ड और अनफ़ोल्ड किए गए डिसप्ले.
कॉन्फ़िगरेशन सेटिंग और एपीआई की छोटी सूची की मदद से, अडैप्टिव ऐप्लिकेशन बनाए जा सकते हैं. हालांकि, कुछ पुरानी सेटिंग और एपीआई, अडैप्टिव ऐप्लिकेशन के साथ काम नहीं करते. इसलिए, इनका इस्तेमाल नहीं करना चाहिए.
साइज़ बदलने की सुविधा
अडैप्टिव ऐप्लिकेशन में, ऐप्लिकेशन का साइज़ बदलने और मल्टी‑विंडो मोड की सुविधा काम करती है.
<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 Adaptive लाइब्रेरी के 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 की मदद से बनाएं. नई सुविधाओं और रिलीज़ के बारे में अप-टू-डेट रहें.
पुरानी टेक्नोलॉजी पर भरोसा न करें. अपने ऐप्लिकेशन को पुराना न होने दें.
Compose Material 3 अडैप्टिव लाइब्रेरी
Compose Material 3 Adaptive लाइब्रेरी, ऐसे कॉम्पोनेंट और एपीआई उपलब्ध कराती है जिनकी मदद से अडैप्टिव ऐप्लिकेशन बनाए जा सकते हैं.
अपने ऐप्लिकेशन को अडैप्टिव बनाने के लिए, इन एपीआई का इस्तेमाल करें:
NavigationSuiteScaffold: ऐप्लिकेशन की विंडो के साइज़ क्लास के हिसाब से, नेविगेशन बार और नेविगेशन रेल के बीच स्विच करता है.ListDetailPaneScaffold: यह लिस्ट-डिटेल कैननिकल लेआउट लागू करता है. यह लेआउट को ऐप्लिकेशन विंडो के साइज़ के हिसाब से अडजस्ट करता है.SupportingPaneScaffold: इससे, कैननिकल लेआउट के साथ-साथ सपोर्टिंग पैन भी लागू होता है.
एक ही काम को बार-बार न करें. Jetpack Compose की सभी लाइब्रेरी से, डेवलपर की प्रॉडक्टिविटी बढ़ाने में मदद मिलती है. इसका फ़ायदा ज़रूर लें.
लेआउट
उपयोगकर्ताओं को उम्मीद होती है कि ऐप्लिकेशन, उपलब्ध डिसप्ले स्पेस का ज़्यादा से ज़्यादा इस्तेमाल करें. इसके लिए, वे अतिरिक्त कॉन्टेंट या बेहतर कंट्रोल का इस्तेमाल करते हैं.
अडैप्टिव ऐप्लिकेशन, डिसप्ले में हुए बदलावों के आधार पर लेआउट को ऑप्टिमाइज़ करते हैं. खास तौर पर, ऐप्लिकेशन विंडो के साइज़ में हुए बदलाव या डिवाइस के पोस्चर में हुए बदलावों के आधार पर.
विंडो का साइज़ बदलने पर, यूज़र इंटरफ़ेस (यूआई) कॉम्पोनेंट में बदलाव करें, ताकि डिसप्ले के उपलब्ध स्पेस का फ़ायदा उठाया जा सके. उदाहरण के लिए, छोटी विंडो के साइज़ पर इस्तेमाल किए गए बॉटम नेविगेशन बार को बदलकर, मीडियम और बड़ी विंडो पर वर्टिकल नेविगेशन रेल का इस्तेमाल करें. डायलॉग को सभी डिसप्ले पर ऐक्सेस किया जा सकता है.
कॉन्टेंट को पैन में व्यवस्थित करें, ताकि मल्टी‑पैन लेआउट इस्तेमाल किए जा सकें. जैसे, डाइनैमिक कॉन्टेंट दिखाने के लिए सूची की जानकारी और साथ में दिखने वाला पैनल.
अगर कॉन्टेंट पैन का इस्तेमाल नहीं किया जा रहा है, तो सिर्फ़ यूज़र इंटरफ़ेस (यूआई) एलिमेंट को खींचकर, डिसप्ले के लिए उपलब्ध जगह को न भरें. टेक्स्ट की लंबी लाइनों को पढ़ना मुश्किल होता है. खींचे गए बटन ठीक से डिज़ाइन नहीं किए गए हैं. अगर Modifier.fillMaxWidth का इस्तेमाल किया जाता है, तो यह न मान लें कि यह सभी डिसप्ले साइज़ के लिए सही तरीका है.
इनपुट डिवाइस
उपयोगकर्ता, ऐप्लिकेशन के साथ इंटरैक्ट करने के लिए सिर्फ़ टच स्क्रीन का इस्तेमाल नहीं करते.
अडैप्टिव ऐप्लिकेशन, बाहरी कीबोर्ड, माउस, और स्टाइलस के साथ काम करते हैं. इससे उपयोगकर्ता को बेहतर अनुभव मिलता है. साथ ही, उपयोगकर्ता को सभी तरह के डिवाइसों पर ज़्यादा काम करने में मदद मिलती है.
Android फ़्रेमवर्क में पहले से मौजूद सुविधाओं का इस्तेमाल करें. जैसे, कीबोर्ड टैब नेविगेशन और माउस या ट्रैकपैड से क्लिक करना, चुनना, और स्क्रोल करना. अपने ऐप्लिकेशन के कीबोर्ड शॉर्टकट, कीबोर्ड शॉर्टकट हेल्पर में पब्लिश करें.
Jetpack Material 3 लाइब्रेरी का इस्तेमाल करें, ताकि उपयोगकर्ता स्टाइलस का इस्तेमाल करके किसी भी TextField कॉम्पोनेंट में लिख सकें.
इनपुट के अन्य तरीकों को इस्तेमाल करना मुश्किल न बनाएं. ऐक्सेसिबिलिटी से जुड़ी समस्याएं न हों.
खास जानकारी
- Compose और Material 3 अडैप्टिव लाइब्रेरी की मदद से अपना ऐप्लिकेशन बनाना
- विंडो के साइज़ के हिसाब से लेआउट तय करना
- कई पैन वाले लेआउट बनाना
- अपने ऐप्लिकेशन का साइज़ बदलने की सुविधा चालू करना
- गतिविधि के ओरिएंटेशन को कभी लॉक न करें
- आस्पेक्ट रेशियो (लंबाई-चौड़ाई का अनुपात) पर पाबंदी न लगाएं
- टच के अलावा अन्य इनपुट का इस्तेमाल किया जा सकता है
- रुके हुए एपीआई का इस्तेमाल न करना
✓ उपयोगकर्ताओं की उम्मीदों को पूरा करें: अपने ऐप्लिकेशन को अलग-अलग डिवाइसों के लिए ऑप्टिमाइज़ करें, ताकि लोग हर दिन इसका इस्तेमाल कर सकें.
✗ इंतज़ार न करें. आज ही शुरू करें!