支持多窗口模式

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

पहली इमेज. स्प्लिट-स्क्रीन मोड में, दो ऐप्लिकेशन को एक साथ दिखाएं.

फ़ोन पर स्प्लिट स्क्रीन मोड को ऐक्सेस करने के बारे में उपयोगकर्ता के लिए निर्देश पाने के लिए, Pixel फ़ोन पर एक ही समय पर दो ऐप्लिकेशन देखना पर जाएं.

वर्शन के हिसाब से मल्टी-विंडो की सुविधाएं

मल्टी-विंडो मोड का अनुभव, Android वर्शन और डिवाइस के टाइप पर निर्भर करता है:

  • Android 7.0 (एपीआई लेवल 24) में, छोटी स्क्रीन वाले डिवाइसों पर स्प्लिट-स्क्रीन मोड और चुनिंदा डिवाइसों पर पिक्चर में पिक्चर मोड की सुविधा जोड़ी गई थी.

    • स्प्लिट-स्क्रीन मोड में, स्क्रीन पर दो ऐप्लिकेशन एक साथ दिखते हैं. ये ऐप्लिकेशन, एक-दूसरे के बगल में या एक के ऊपर एक करके दिखते हैं. उपयोगकर्ता, दोनों ऐप्लिकेशन को अलग करने वाले डिवाइडर को खींचकर, एक ऐप्लिकेशन को बड़ा और दूसरे को छोटा कर सकते हैं.

    • पिक्चर में पिक्चर मोड की मदद से, उपयोगकर्ता किसी दूसरे ऐप्लिकेशन का इस्तेमाल करते समय भी वीडियो चलाना जारी रख सकते हैं. पिक्चर में पिक्चर मोड की सुविधा देखें.

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

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

  • Android 8.0 (एपीआई लेवल 26) में, पिक्चर में पिक्चर मोड को छोटी स्क्रीन वाले डिवाइसों पर इस्तेमाल करने की सुविधा जोड़ी गई है.

  • Android 12 (एपीआई लेवल 31) में, मल्टी-विंडो मोड को स्टैंडर्ड मोड के तौर पर इस्तेमाल किया जा सकता है.

    • बड़ी स्क्रीन (मीडियम या बड़ी विंडो साइज़ क्लास) पर, प्लैटफ़ॉर्म पर सभी ऐप्लिकेशन, मल्टी-विंडो मोड में काम करते हैं. भले ही, ऐप्लिकेशन का कॉन्फ़िगरेशन कुछ भी हो. अगर resizeableActivity="false" है, तो डिसप्ले डाइमेंशन के हिसाब से ज़रूरत पड़ने पर, ऐप्लिकेशन को काम करने के लिए ज़रूरी मोड में डाल दिया जाता है.

    • छोटी स्क्रीन (कॉम्पैक्ट विंडो साइज़ क्लास) पर, सिस्टम किसी गतिविधि के minWidth और minHeight की जांच करता है. इससे यह पता चलता है कि गतिविधि, मल्टी-विंडो मोड में चल सकती है या नहीं. अगर resizeableActivity="false" है, तो ऐप्लिकेशन को मल्टी-विंडो मोड में चलने से रोक दिया जाता है. भले ही, उसकी चौड़ाई और ऊंचाई कम से कम कितनी भी हो.

स्प्लिट स्क्रीन मोड

उपयोगकर्ता, स्प्लिट स्क्रीन मोड को इन तरीकों से चालू करते हैं:

  1. हाल ही में इस्तेमाल किए गए आइटम की स्क्रीन खोलें
  2. किसी ऐप्लिकेशन को देखने के लिए स्वाइप करना
  3. ऐप्लिकेशन के टाइटल बार में मौजूद ऐप्लिकेशन आइकॉन को दबाएं
  4. स्प्लिट स्क्रीन मेन्यू का विकल्प चुनना
  5. हाल ही में इस्तेमाल किए गए ऐप्लिकेशन की स्क्रीन से कोई दूसरा ऐप्लिकेशन चुनें या हाल ही में इस्तेमाल किए गए ऐप्लिकेशन की स्क्रीन बंद करके कोई दूसरा ऐप्लिकेशन चलाएं

उपयोगकर्ता, विंडो के डिवाइडर को स्क्रीन के किनारे पर खींचकर, स्प्लिट-स्क्रीन मोड से बाहर निकल सकते हैं. जैसे, ऊपर या नीचे, बाईं या दाईं ओर.

आस-पास मौजूद ऐप्लिकेशन लॉन्च करना

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

FLAG_ACTIVITY_LAUNCH_ADJACENT को Android 7.0 (एपीआई लेवल 24) में जोड़ा गया था, ताकि स्प्लिट स्क्रीन मोड में चल रहे ऐप्लिकेशन, बगल वाली विंडो में ऐक्टिविटी लॉन्च कर सकें.

Android 12L (एपीआई लेवल 32) और उसके बाद के वर्शन में, फ़्लैग की परिभाषा को बढ़ाया गया है. इससे, फ़ुल स्क्रीन पर चल रहे ऐप्लिकेशन को स्प्लिट-स्क्रीन मोड चालू करने और फिर बगल की विंडो में गतिविधियां शुरू करने की सुविधा मिलती है.

आस-पास की कोई गतिविधि शुरू करने के लिए, FLAG_ACTIVITY_NEW_TASK के साथ FLAG_ACTIVITY_LAUNCH_ADJACENT का इस्तेमाल करें. उदाहरण के लिए:

fun openUrlInAdjacentWindow(url:
String) { Intent(Intent.ACTION_VIEW).apply { data = Uri.parse(url)
addFlags(Intent.FLAG_ACTIVITY_LAUNCH_ADJACENT or Intent.FLAG_ACTIVITY_NEW_TASK)
 }.also { intent -> startActivity(intent) } }

मल्टी-विंडो मोड में गतिविधि पूरी होने की प्रोसेस

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

एक से ज़्यादा बार फिर से शुरू करना

Android 10 (एपीआई लेवल 29) और उसके बाद के वर्शन में, एक से ज़्यादा ऐप्लिकेशन को फिर से शुरू करने की सुविधा काम करती है. जब डिवाइस मल्टी-विंडो मोड में होता है, तो सभी गतिविधियां RESUMED स्थिति में रहती हैं. अगर किसी ऐक्टिविटी के ऊपर पारदर्शी ऐक्टिविटी है या उस पर फ़ोकस नहीं किया जा सकता, तो उस ऐक्टिविटी को रोका जा सकता है. उदाहरण के लिए, अगर ऐक्टिविटी पिक्चर में पिक्चर मोड में है. ऐसा भी हो सकता है कि किसी समय पर किसी गतिविधि पर फ़ोकस न हो. उदाहरण के लिए, अगर सूचनाओं का ड्रॉअर खुला हो. onStop() तरीका हमेशा की तरह काम करता है: जब भी किसी गतिविधि को स्क्रीन से हटाया जाता है, तब इस तरीके को कॉल किया जाता है.

एक से ज़्यादा वीडियो फिर से चलाने की सुविधा, Android 9 (एपीआई लेवल 28) पर काम करने वाले चुनिंदा डिवाइसों पर भी उपलब्ध है. Android 9 डिवाइसों पर, एक से ज़्यादा बार वीडियो चलाने की सुविधा के लिए ऑप्ट-इन करने के लिए, मेनिफ़ेस्ट का यह मेटाडेटा जोड़ें:

<meta-data android:name="android.allow_multiple_resumed_activities" android:value="true" />

यह पुष्टि करने के लिए कि कोई डिवाइस इस मेनिफ़ेस्ट मेटाडेटा के साथ काम करता है या नहीं, डिवाइस की जानकारी देखें.

Android 9

Android 9 (API लेवल 28) और उससे पहले के वर्शन पर, मल्टी-विंडो मोड में किसी भी समय सिर्फ़ वह गतिविधि चालू रहती है जिससे उपयोगकर्ता ने हाल ही में इंटरैक्ट किया है. इस गतिविधि को सबसे ऊपर रखा जाता है. साथ ही, यह RESUMED स्थिति में मौजूद एकमात्र गतिविधि होती है. दिखने वाली अन्य सभी गतिविधियां STARTED हैं, लेकिन RESUMED नहीं हैं. हालांकि, सिस्टम उन गतिविधियों को ज़्यादा प्राथमिकता देता है जो दिखती हैं, लेकिन फिर से शुरू नहीं की गई हैं. अगर उपयोगकर्ता, दिख रही किसी एक गतिविधि के साथ इंटरैक्ट करता है, तो उस गतिविधि को फिर से शुरू किया जाता है और सबसे ऊपर मौजूद पिछली गतिविधि STARTED स्थिति में चली जाती है.

जब किसी ऐप्लिकेशन की एक ही प्रोसेस में कई गतिविधियां होती हैं, तो सबसे ज़्यादा z-क्रम वाली गतिविधि फिर से शुरू की जाती है और बाकी गतिविधियों को रोक दिया जाता है.

कॉन्फ़िगरेशन में बदलाव

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

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

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

संसाधन का खास ऐक्सेस

एक से ज़्यादा बार वीडियो चलाने की सुविधा के साथ काम करने के लिए, onTopResumedActivityChanged() लाइफ़साइकल कॉलबैक का इस्तेमाल करें.

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

override fun
onTopResumedActivityChanged(topResumed: Boolean) { if (topResumed) { // Top
resumed activity. // Can be a signal to re-acquire exclusive resources. } else {
// No longer the top resumed activity. } }

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

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

कैमरे का इस्तेमाल करने वाले ऐप्लिकेशन के लिए, CameraManager.AvailabilityCallback#onCameraAccessPrioritiesChanged() एक संकेत देता है कि कैमरे का ऐक्सेस पाने का यह सही समय हो सकता है. यह तरीका, Android 10 (एपीआई लेवल 29) से उपलब्ध है.

ध्यान रखें कि resizeableActivity=false का मतलब यह नहीं है कि आपके ऐप्लिकेशन के पास कैमरे का ऐक्सेस है. ऐसा इसलिए, क्योंकि कैमरे का इस्तेमाल करने वाले दूसरे ऐप्लिकेशन, दूसरे डिसप्ले पर खोले जा सकते हैं.

दूसरी इमेज. मल्टी-विंडो मोड में कैमरा.

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

जब किसी ऐप्लिकेशन को CameraDevice.StateCallback#onDisconnected() कॉलबैक मिलता है, तो कैमरा डिवाइस पर आने वाले अगले कॉल में CameraAccessException दिखेगा.

मल्टी-डिसप्ले

Android 10 (एपीआई लेवल 29) में, सेकंडरी डिसप्ले पर गतिविधियां की जा सकती हैं. अगर कोई गतिविधि, एक से ज़्यादा डिसप्ले वाले डिवाइस पर चल रही है, तो उपयोगकर्ता उस गतिविधि को एक डिसप्ले से दूसरे डिसप्ले पर ले जा सकते हैं. मल्टी-रीस्यूम सुविधा, एक से ज़्यादा स्क्रीन वाली स्थितियों पर भी लागू होती है. साथ ही, एक ही समय पर कई गतिविधियों में उपयोगकर्ता का इनपुट मिल सकता है.

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

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

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

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

तीसरी इमेज.एक से ज़्यादा डिसप्ले पर किसी गतिविधि के कई इंस्टेंस.

आपके पास मल्टी-डिसप्ले एपीआई के बारे में पढ़ने का विकल्प भी है. ये एपीआई, Android 8.0 में लॉन्च किए गए थे.

गतिविधि बनाम ऐप्लिकेशन का कॉन्टेक्स्ट

मल्टी-डिसप्ले में सही कॉन्टेक्स्ट का इस्तेमाल करना ज़रूरी है. संसाधनों को ऐक्सेस करते समय, गतिविधि का कॉन्टेक्स्ट (जो दिखता है) और ऐप्लिकेशन का कॉन्टेक्स्ट (जो नहीं दिखता) अलग-अलग होता है.

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

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

val activityDisplay = activity.getDisplay()

गतिविधि की मौजूदा विंडो की मेट्रिक पाएं:

val windowMetrics = activity.getWindowManager().getCurrentWindowMetrics()

मौजूदा सिस्टम कॉन्फ़िगरेशन के लिए, ज़्यादा से ज़्यादा विंडो मेट्रिक पाएं:

val maximumWindowMetrics = activity.getWindowManager().getMaximumWindowMetrics()

ज़्यादा से ज़्यादा विंडो मेट्रिक, हिसाब लगाने, लेआउट चुनने या पहले से फ़ेच किए जाने वाले संसाधनों का साइज़ तय करने के लिए होती हैं. onCreate() में यह सुविधा उपलब्ध होने पर, पहले लेआउट पास से पहले ही ये फ़ैसले लिए जा सकते हैं. इन मेट्रिक का इस्तेमाल, खास व्यू एलिमेंट को व्यवस्थित करने के लिए नहीं किया जाना चाहिए. इसके बजाय, Configuration ऑब्जेक्ट की जानकारी का इस्तेमाल करें.

डिसप्ले कटआउट

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

दूसरे डिसप्ले

DisplayManager सिस्टम सेवा से, उपलब्ध डिसप्ले देखे जा सकते हैं:

val displayManager =
getSystemService(Context.DISPLAY_SERVICE) as DisplayManager val displays =
displayManager.getDisplays()

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

यह तय करना कि कोई गतिविधि डिसप्ले पर लॉन्च की जा सकती है या नहीं:

val activityManager =
getSystemService(Context.ACTIVITY_SERVICE) as ActivityManager val
activityAllowed = activityManager.isActivityStartAllowedOnDisplay(context,
displayId, intent)

इसके बाद, डिसप्ले पर गतिविधि लॉन्च करें:

val options = ActivityOptions.makeBasic()
options.setLaunchDisplayId(targetDisplay.displayId) startActivity(intent,
options.toBundle())

मल्टी-डिसप्ले की सुविधा

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

सॉफ़्टवेयर कीबोर्ड

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

चौथी इमेज. दूसरे डिसप्ले पर कीबोर्ड.

वॉलपेपर

Android 10 (एपीआई लेवल 29) में, सेकंडरी स्क्रीन पर वॉलपेपर हो सकता है. फ़्रेमवर्क, हर डिसप्ले के लिए WallpaperService.Engine का एक अलग इंस्टेंस बनाता है. पक्का करें कि हर इंजन का प्लैटफ़ॉर्म अलग-अलग ड्रॉ किया गया हो. डेवलपर, WallpaperService.Engine#getDisplayContext() में डिसप्ले कॉन्टेक्स्ट का इस्तेमाल करके ऐसेट लोड कर सकते हैं. साथ ही, पक्का करें कि आपकी WallpaperInfo.xml फ़ाइल android:supportsMultipleDisplays="true" सेट करती हो.

पांचवीं इमेज. फ़ोन और सेकंडरी डिसप्ले पर वॉलपेपर.

लॉन्चर वाले ऐप्लिकेशन

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

<activity>
    ...
    <intent-filter>
        <category android:name="android.intent.category.SECONDARY_HOME" />
        ...
    </intent-filter>
</activity>

गतिविधि में लॉन्च मोड होना चाहिए, जो एक से ज़्यादा इंस्टेंस को रोके और अलग-अलग स्क्रीन साइज़ के हिसाब से अडजस्ट हो सके. लॉन्च मोड, singleInstance या singleTask नहीं हो सकता.

उदाहरण के लिए, Launcher3 के AOSP वर्शन में, SECONDARY_HOME गतिविधि का इस्तेमाल किया जा सकता है.

छठी इमेज. फ़ोन पर Material Design लॉन्चर.
सातवीं इमेज. सेकंडरी डिसप्ले पर Material Design वाला लॉन्चर.

विंडो मेट्रिक

Android 11 (एपीआई लेवल 30) में, मल्टी-विंडो मोड में चल रहे ऐप्लिकेशन के बॉउंड देने के लिए, ये WindowManager तरीके जोड़े गए हैं:

  • getCurrentWindowMetrics(): सिस्टम की मौजूदा विंडो स्टेटस के लिए, WindowMetrics ऑब्जेक्ट दिखाता है.
  • getMaximumWindowMetrics(): सिस्टम की सबसे बड़ी संभावित विंडो स्टेटस के लिए WindowMetrics दिखाता है.

Jetpack WindowManager लाइब्रेरी के computeCurrentWindowMetrics() और computeMaximumWindowMetrics() तरीके, एक जैसे फ़ंक्शन उपलब्ध कराते हैं. हालांकि, API लेवल 14 के साथ काम करने की सुविधा, computeCurrentWindowMetrics() के साथ ही उपलब्ध है.

मौजूदा डिसप्ले के अलावा, अन्य डिसप्ले के लिए मेट्रिक पाने के लिए, ये काम करें (जैसा कि कोड स्निपेट में दिखाया गया है):

  • डिसप्ले कॉन्टेक्स्ट बनाना
  • डिसप्ले के लिए विंडो कॉन्टेक्स्ट बनाना
  • विंडो कॉन्टेक्स्ट का WindowManager पाना
  • ऐप्लिकेशन के लिए उपलब्ध डिसप्ले के ज़्यादा से ज़्यादा हिस्से का WindowMetrics पाना

val windowMetrics =
context.createDisplayContext(display)
.createWindowContext(WindowManager.LayoutParams.TYPE_APPLICATION, null)
.getSystemService(WindowManager::class.java) .maximumWindowMetrics

अब काम न करने वाले तरीके

WindowManager के नए तरीकों के पक्ष में, एपीआई लेवल 30 में Display के तरीकों getSize() और getMetrics() का इस्तेमाल बंद कर दिया गया है.

Android 12 (एपीआई लेवल 31) में, Display के getRealSize() और getRealMetrics() तरीके काम नहीं करेंगे. साथ ही, इनके काम करने के तरीके को अपडेट किया जाएगा, ताकि ये getMaximumWindowMetrics() के काम करने के तरीके से ज़्यादा मिलते-जुलते हों.

मल्टी-विंडो मोड का कॉन्फ़िगरेशन

अगर आपका ऐप्लिकेशन Android 7.0 (एपीआई लेवल 24) या उसके बाद के वर्शन को टारगेट करता है, तो आपके पास यह कॉन्फ़िगर करने का विकल्प होता है कि आपके ऐप्लिकेशन की गतिविधियां मल्टी-विंडो मोड के साथ कैसे काम करेंगी और क्या वे इस मोड के साथ काम करेंगी. साइज़ और लेआउट, दोनों को कंट्रोल करने के लिए, अपने मेनिफ़ेस्ट में एट्रिब्यूट सेट किए जा सकते हैं. रूट गतिविधि की एट्रिब्यूट सेटिंग, उसके टास्क स्टैक में मौजूद सभी गतिविधियों पर लागू होती हैं. उदाहरण के लिए, अगर रूट ऐक्टिविटी में android:resizeableActivity="true" है, तो टास्क स्टैक में मौजूद सभी ऐक्टिविटी का साइज़ बदला जा सकता है. Chromebook जैसे कुछ बड़े डिवाइसों पर, आपका ऐप्लिकेशन android:resizeableActivity="false" तय करने के बावजूद, साइज़ में बदली जा सकने वाली विंडो में चल सकता है. अगर इससे आपका ऐप्लिकेशन काम नहीं करता है, तो ऐसे डिवाइसों पर अपने ऐप्लिकेशन की उपलब्धता पर पाबंदी लगाने के लिए, Google Play पर फ़िल्टर का इस्तेमाल किया जा सकता है.

Android 12 (एपीआई लेवल 31) डिफ़ॉल्ट रूप से मल्टी-विंडो मोड में काम करता है. बड़ी स्क्रीन (मीडियम या बड़ा विंडो साइज़ क्लास) पर, सभी ऐप्लिकेशन मल्टी-विंडो मोड में चलते हैं. भले ही, ऐप्लिकेशन का कॉन्फ़िगरेशन कुछ भी हो. छोटी स्क्रीन पर, सिस्टम किसी गतिविधि की minWidth, minHeight, और resizeableActivity सेटिंग की जांच करता है. इससे यह पता चलता है कि गतिविधि, मल्टी-विंडो मोड में चल सकती है या नहीं.

resizeableActivity

एपीआई लेवल 30 और उससे पहले के वर्शन के लिए, मल्टी-विंडो मोड को चालू या बंद करने के लिए, अपने मेनिफ़ेस्ट के <activity> या <application> एलिमेंट में यह एट्रिब्यूट सेट करें:

<application
  android:name=".MyActivity"
  android:resizeableActivity=["true" | "false"] />;

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

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

अगर आपका ऐप्लिकेशन, एपीआई लेवल 31 या उसके बाद के वर्शन को टारगेट करता है, तो यह एट्रिब्यूट छोटी और बड़ी स्क्रीन पर अलग-अलग तरीके से काम करता है:

  • बड़ी स्क्रीन (मीडियम या बड़ा विंडो साइज़ क्लास): सभी ऐप्लिकेशन, मल्टी-विंडो मोड के साथ काम करते हैं. इस एट्रिब्यूट से पता चलता है कि किसी गतिविधि का साइज़ बदला जा सकता है या नहीं. अगर resizeableActivity="false" है, तो डिसप्ले डाइमेंशन के मुताबिक होने के लिए, ज़रूरत पड़ने पर ऐप्लिकेशन को काम करने के तरीके के हिसाब से मोड में डाल दिया जाता है.
  • छोटी स्क्रीन (कॉम्पैक्ट विंडो साइज़ क्लास): अगर resizeableActivity="true" और ऐक्टिविटी की कम से कम चौड़ाई और कम से कम ऊंचाई, मल्टी-विंडो की ज़रूरी शर्तों के मुताबिक है, तो ऐक्टिविटी मल्टी-विंडो मोड के साथ काम करती है. अगर resizeableActivity="false" है, तो गतिविधि में मल्टी-विंडो मोड काम नहीं करता. भले ही, गतिविधि की कम से कम चौड़ाई और ऊंचाई कुछ भी हो.

supportsPictureInPicture

इस एट्रिब्यूट को अपने मेनिफ़ेस्ट के <activity> नोड में सेट करें. इससे यह पता चलता है कि गतिविधि, पिक्चर में पिक्चर मोड के साथ काम करती है या नहीं.

<activity
  android:name=".MyActivity"
  android:supportsPictureInPicture=["true" | "false"] />

configChanges

एक से ज़्यादा विंडो के कॉन्फ़िगरेशन में होने वाले बदलावों को खुद मैनेज करने के लिए, अपने ऐप्लिकेशन मेनिफ़ेस्ट <activity> नोड में android:configChanges एट्रिब्यूट जोड़ें. साथ ही, इसमें कम से कम ये वैल्यू डालें:

<activity
  android:name=".MyActivity"
  android:configChanges="screenSize | smallestScreenSize
      | screenLayout | orientation" />

android:configChanges जोड़ने के बाद, आपकी गतिविधि और फ़्रैगमेंट को मिटाने और फिर से बनाने के बजाय, onConfigurationChanged() पर कॉलबैक मिलता है. इसके बाद, अपने व्यू को मैन्युअल तरीके से अपडेट किया जा सकता है, संसाधनों को फिर से लोड किया जा सकता है, और ज़रूरत के हिसाब से अन्य कार्रवाइयां की जा सकती हैं.

<layout>

Android 7.0 (एपीआई लेवल 24) और इसके बाद के वर्शन में, <layout> मेनिफ़ेस्ट एलिमेंट कई एट्रिब्यूट के साथ काम करता है. इन एट्रिब्यूट से यह तय होता है कि मल्टी-विंडो मोड में कोई गतिविधि कैसा व्यवहार करती है:

  • android:defaultHeight, android:defaultWidth: डेस्कटॉप विंडो मोड में लॉन्च होने पर, गतिविधि की डिफ़ॉल्ट ऊंचाई और चौड़ाई.

  • android:gravity: डेस्कटॉप विंडो मोड में लॉन्च होने पर, गतिविधि की शुरुआती जगह. सही वैल्यू के लिए, Gravity क्लास देखें.

  • android:minHeight, android:minWidth: स्प्लिट-स्क्रीन और डेस्कटॉप विंडो मोड, दोनों में गतिविधि के लिए कम से कम ऊंचाई और कम से कम चौड़ाई. अगर उपयोगकर्ता, किसी गतिविधि को तय किए गए कम से कम साइज़ से छोटा करने के लिए, स्प्लिट-स्क्रीन मोड में डिवाइडर को आगे-पीछे करता है, तो सिस्टम उस गतिविधि को उस साइज़ में काट देता है जिसका उपयोगकर्ता अनुरोध करता है.

यहां दिए गए कोड में, किसी ऐक्टिविटी के डिफ़ॉल्ट साइज़ और जगह के साथ-साथ, डेस्कटॉप विंडो मोड में दिखने पर उसके कम से कम साइज़ की जानकारी देने का तरीका बताया गया है:

<activity android:name=".MyActivity">
    <layout android:defaultHeight="500dp"
          android:defaultWidth="600dp"
          android:gravity="top|end|..."
          android:minHeight="450dp"
          android:minWidth="300dp" />
</activity>

रनटाइम के दौरान मल्टी-विंडो मोड

Android 7.0 से, सिस्टम में ऐसे ऐप्लिकेशन के साथ काम करने की सुविधा उपलब्ध है जो कई विंडो मोड में काम कर सकते हैं.

मल्टी-विंडो मोड में बंद की गई सुविधाएं

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

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

सिस्टम, android:screenOrientation एट्रिब्यूट में किए गए बदलावों को अनदेखा कर देता है.

मल्टी-विंडो मोड की क्वेरी और कॉलबैक

Activity क्लास, मल्टी-विंडो मोड के साथ काम करने के लिए ये तरीके उपलब्ध कराती है:

  • isInMultiWindowMode(): इससे पता चलता है कि गतिविधि, मल्टी-विंडो मोड में है या नहीं.

  • isInPictureInPictureMode(): इससे पता चलता है कि गतिविधि, पिक्चर में पिक्चर मोड में है या नहीं.

  • onMultiWindowModeChanged(): जब भी कोई गतिविधि मल्टी-विंडो मोड में जाती है या उससे बाहर निकलती है, तब सिस्टम इस तरीके को कॉल करता है. अगर गतिविधि मल्टी-विंडो मोड में जा रही है, तो सिस्टम इस तरीके को 'सही' वैल्यू पास करता है. अगर गतिविधि मल्टी-विंडो मोड से बाहर निकल रही है, तो सिस्टम इस तरीके को 'गलत' वैल्यू पास करता है.

  • onPictureInPictureModeChanged(): जब भी गतिविधि, पिक्चर में पिक्चर मोड में जाती है या उससे बाहर निकलती है, तब सिस्टम इस तरीके को कॉल करता है. अगर गतिविधि, पिक्चर में पिक्चर मोड में जा रही है, तो सिस्टम इस तरीके को 'सही' वैल्यू पास करता है. अगर गतिविधि, पिक्चर में पिक्चर मोड से बाहर निकल रही है, तो सिस्टम इस तरीके को 'गलत' वैल्यू पास करता है.

Fragment क्लास, इनमें से कई तरीकों के वर्शन दिखाती है. उदाहरण के लिए, Fragment.onMultiWindowModeChanged().

पिक्चर में पिक्चर मोड

किसी गतिविधि को पिक्चर में पिक्चर मोड में डालने के लिए, enterPictureInPictureMode() को कॉल करें. अगर डिवाइस पर पिक्चर में पिक्चर मोड काम नहीं करता है, तो इस तरीके का कोई असर नहीं पड़ेगा. ज़्यादा जानकारी के लिए, पिक्चर में पिक्चर (पीआईपी) की सुविधा का इस्तेमाल करके वीडियो जोड़ना लेख पढ़ें.

मल्टी-विंडो मोड में नई गतिविधियां

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

अगर कोई डिवाइस डेस्कटॉप विंडो मोड में है और कोई नई गतिविधि लॉन्च की जा रही है, तो ActivityOptions.setLaunchBounds() को कॉल करके, नई गतिविधि के डाइमेंशन और स्क्रीन की जगह की जानकारी दी जा सकती है. अगर डिवाइस मल्टी-विंडो मोड में नहीं है, तो इस तरीके का कोई असर नहीं पड़ेगा.

एपीआई लेवल 30 और उससे पहले के वर्शन में, अगर किसी टास्क स्टैक में कोई ऐक्टिविटी लॉन्च की जाती है, तो वह ऐक्टिविटी स्क्रीन पर मौजूद ऐक्टिविटी की जगह ले लेती है. साथ ही, उसमें मल्टी-विंडो की सभी प्रॉपर्टी शामिल हो जाती हैं. अगर आपको नई गतिविधि को मल्टी-विंडो मोड में अलग विंडो के तौर पर लॉन्च करना है, तो आपको उसे नए टास्क स्टैक में लॉन्च करना होगा.

Android 12 (एपीआई लेवल 31) की मदद से, ऐप्लिकेशन की टास्क विंडो को कई ऐक्टिविटी में बांटा जा सकता है. एक्सएमएल कॉन्फ़िगरेशन फ़ाइल बनाकर या Jetpack WindowManager API कॉल करके, यह तय किया जा सकता है कि आपका ऐप्लिकेशन अपनी गतिविधियों को कैसे दिखाए. जैसे, पूरी स्क्रीन पर, एक साथ या स्टैक में.

खींचें और छोड़ें

जब दो गतिविधियां स्क्रीन शेयर कर रही हों, तब उपयोगकर्ता एक गतिविधि से दूसरी गतिविधि में डेटा को खींचकर छोड़ सकते हैं. (Android 7.0 से पहले, उपयोगकर्ता सिर्फ़ एक गतिविधि में डेटा को खींचकर छोड़ सकते थे.) ड्रॉप किए गए कॉन्टेंट को तुरंत स्वीकार करने की सुविधा जोड़ने के लिए, DropHelper एपीआई देखें. 'खींचें और छोड़ें' सुविधा के बारे में पूरी जानकारी पाने के लिए, 'खींचें और छोड़ें' सुविधा चालू करना लेख पढ़ें.

एक से ज़्यादा इंस्टेंस

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

Android 12 (एपीआई लेवल 31) की मदद से, एक ही टास्क विंडो में किसी गतिविधि के दो इंस्टेंस एक साथ खोले जा सकते हैं.

अगर आपको उपयोगकर्ताओं को ऐप्लिकेशन लॉन्चर या टास्कबार से, अपने ऐप्लिकेशन का दूसरा इंस्टेंस शुरू करने की अनुमति देनी है, तो पक्का करें कि आपका लॉन्चर ऐक्टिविटी android:resizeableActivity="true" सेट करता हो. साथ ही, वह लॉन्च मोड का इस्तेमाल न करता हो जिससे एक से ज़्यादा इंस्टेंस शुरू न हो पाएं. उदाहरण के लिए, FLAG_ACTIVITY_MULTIPLE_TASK या FLAG_ACTIVITY_NEW_DOCUMENT सेट होने पर, singleInstancePerTask गतिविधि को अलग-अलग टास्क में कई बार इंस्टैंशिएट किया जा सकता है.

मल्टी-इंस्टेंस को मल्टी-पैनल लेआउट के साथ न जोड़ें. जैसे, list-detail presentation, जो SlidingPaneLayout का इस्तेमाल करता है और एक ही विंडो में चलता है.

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

मल्टी-विंडो मोड की पुष्टि करना

भले ही, आपका ऐप्लिकेशन एपीआई लेवल 24 या उसके बाद के वर्शन को टारगेट करता हो या नहीं, आपको यह पुष्टि करनी चाहिए कि वह मल्टी-विंडो मोड में कैसा काम करता है. ऐसा इसलिए, ताकि अगर कोई उपयोगकर्ता Android 7.0 या उसके बाद के वर्शन वाले डिवाइस पर, उसे मल्टी-विंडो मोड में लॉन्च करने की कोशिश करे, तो उसे कोई समस्या न हो.

टेस्ट डिवाइस

Android 7.0 (एपीआई लेवल 24) या उसके बाद के वर्शन वाले डिवाइसों पर, मल्टी-विंडो मोड काम करता है.

एपीआई लेवल 23 या उससे पहले का वर्शन

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

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

अगर ऐप्लिकेशन में कोई तय ओरिएंटेशन है, तो आपको ऐप्लिकेशन को मल्टी-विंडो मोड में डालने की कोशिश करनी चाहिए. पुष्टि करें कि ऐसा करने पर, ऐप्लिकेशन फ़ुल स्क्रीन मोड में बना रहे.

एपीआई लेवल 24 से 30

अगर आपका ऐप्लिकेशन एपीआई लेवल 24 से 30 को टारगेट करता है और मल्टी-विंडो की सुविधा बंद नहीं करता है, तो स्प्लिट-स्क्रीन और डेस्कटॉप विंडो मोड, दोनों में इस तरह के व्यवहार की पुष्टि करें:

  • ऐप्लिकेशन को फ़ुल स्क्रीन में लॉन्च करें. इसके बाद, हाल ही में इस्तेमाल किए गए बटन को दबाकर रखकर, मल्टी-विंडो मोड पर स्विच करें. पुष्टि करें कि ऐप्लिकेशन सही तरीके से स्विच हो रहा है.

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

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

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

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

एपीआई लेवल 31 या उसके बाद का वर्शन

अगर आपका ऐप्लिकेशन एपीआई लेवल 31 या उसके बाद के वर्शन को टारगेट करता है और मुख्य गतिविधि की कम से कम चौड़ाई और कम से कम ऊंचाई, डिसप्ले के उपलब्ध हिस्से के डाइमेंशन से कम या उसके बराबर है, तो एपीआई लेवल 24 से 30 के लिए बताए गए सभी व्यवहारों की पुष्टि करें.

टेस्ट की चेकलिस्ट

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

  • मल्टी-विंडो मोड में जाएं और उससे बाहर निकलें.

  • अपने ऐप्लिकेशन से किसी दूसरे ऐप्लिकेशन पर स्विच करें और पुष्टि करें कि ऐप्लिकेशन दिखने पर, वह ठीक से काम करता है, लेकिन चालू नहीं होता. उदाहरण के लिए, अगर आपका ऐप्लिकेशन वीडियो चला रहा है, तो पुष्टि करें कि उपयोगकर्ता किसी दूसरे ऐप्लिकेशन के साथ इंटरैक्ट करते समय भी वीडियो चलता रहे.

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

  • तेज़ी से कई बार, साइज़ बदलने की कार्रवाइयां करना. पुष्टि करें कि आपका ऐप्लिकेशन क्रैश न हो या ज़्यादा मेमोरी का इस्तेमाल न करता हो. Android Studio का मेमोरी प्रोफ़ाइलर, आपके ऐप्लिकेशन के मेमोरी इस्तेमाल के बारे में जानकारी देता है. मेमोरी प्रोफ़ाइलर की मदद से, अपने ऐप्लिकेशन के मेमोरी इस्तेमाल की जांच करना लेख पढ़ें.

  • अपने ऐप्लिकेशन को कई अलग-अलग विंडो कॉन्फ़िगरेशन में सामान्य रूप से इस्तेमाल करें और यह पुष्टि करें कि ऐप्लिकेशन ठीक से काम कर रहा है. पुष्टि करें कि टेक्स्ट पढ़ा जा सकता हो और यूज़र इंटरफ़ेस (यूआई) के एलिमेंट इतने छोटे न हों कि उनसे इंटरैक्ट करने में समस्या आए.

मल्टी-विंडो की सुविधा बंद की गई

अगर आपने एपीआई लेवल 24 से 30 पर, android:resizeableActivity="false" को सेट करके मल्टी-विंडो की सुविधा बंद की है, तो आपको Android 7.0 से 11 पर चलने वाले डिवाइस पर अपना ऐप्लिकेशन लॉन्च करना चाहिए. इसके बाद, ऐप्लिकेशन को स्प्लिट-स्क्रीन और डेस्कटॉप विंडो मोड में डालने की कोशिश करें. पुष्टि करें कि ऐसा करने पर, ऐप्लिकेशन फ़ुल-स्क्रीन मोड में बना रहे.

अन्य संसाधन

Android में एक से ज़्यादा विंडो इस्तेमाल करने की सुविधा के बारे में ज़्यादा जानकारी के लिए, ये देखें:

आपके लिए सुझाया गया * ध्यान दें: JavaScript बंद होने पर लिंक टेक्स्ट दिखता है * डिवाइस के साथ काम करने की सुविधा वाला मोड * बड़ी स्क्रीन के साइज़ में बदलाव करने की सुविधा * कॉन्फ़िगरेशन में हुए बदलावों को मैनेज करना