डिवाइस के साथ काम करने वाला मोड

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

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

Android 16

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

एपीआई लेवल 36 को टारगेट करने वाले ऐप्लिकेशन के लिए, हर ऐप्लिकेशन के हिसाब से ये बदलाव काम नहीं करते:

ऑप्ट आउट करें

आपका ऐप्लिकेशन, एपीआई लेवल 36 को टारगेट कर सकता है. हालांकि, Android 16 के व्यवहार से ऑप्ट आउट किया जा सकता है. ऐसे में, OVERRIDE_ANY_ORIENTATION_TO_USER लागू नहीं होता.

मेनिफ़ेस्ट प्रॉपर्टी के बारे में जानकारी देना

एपीआई लेवल 36 के व्यवहार से ऑप्ट आउट करने के लिए, PROPERTY_COMPAT_ALLOW_RESTRICTED_RESIZABILITY मेनिफ़ेस्ट प्रॉपर्टी का एलान करें.

किसी खास गतिविधि के लिए ऑप्ट आउट करने के लिए, <activity> एलिमेंट में प्रॉपर्टी सेट करें:

<activity ...>
    <property
        android:name="android.window.PROPERTY_COMPAT_ALLOW_RESTRICTED_RESIZABILITY"
        android:value="true" />
    ...
</activity>

अपने पूरे ऐप्लिकेशन के लिए ऑप्ट आउट करने के लिए, <application> एलिमेंट में प्रॉपर्टी सेट करें:

<application ...>
    <property
        android:name="android.window.PROPERTY_COMPAT_ALLOW_RESTRICTED_RESIZABILITY"
        android:value="true" />
    ...
</application>

अगर आपका ऐप्लिकेशन Android 16 (एपीआई लेवल 36) या इसके बाद के वर्शन को टारगेट करता है, तो यह प्रॉपर्टी, बड़ी स्क्रीन वाले डिवाइसों पर डिसप्ले ओरिएंटेशन को लॉक नहीं करती या स्क्रीन को रोटेट होने से नहीं रोकती.

वर्चुअल डिवाइस

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

  • टैबलेट: कुछ टैबलेट का डिफ़ॉल्ट ओरिएंटेशन, लैंडस्केप होता है. जैसे, Pixel Tablet. कोई डिवाइस अपने नैचुरल ओरिएंटेशन में तब होता है, जब Display#getRotation(), Surface.ROTATION_0 दिखाता है. अगर ऐप्लिकेशन यह मान लेते हैं कि ROTATION_0 पोर्ट्रेट है, तो ऐप्लिकेशन के लेआउट और कैमरे की झलक, डिवाइस के डिसप्ले से मेल नहीं खा सकती.
  • लैंडस्केप फ़ोल्ड किए जा सकने वाले डिवाइस: फ़ोल्ड किए जा सकने वाले कुछ डिवाइस, जैसे कि Pixel Fold, फ़ोल्ड किए जाने पर पोर्ट्रेट ओरिएंटेशन में होते हैं. हालांकि, अनफ़ोल्ड किए जाने पर वे लैंडस्केप ओरिएंटेशन में होते हैं. अगर ऐप्लिकेशन यह मान लेते हैं कि अनफ़ोल्ड किया गया ओरिएंटेशन पोर्ट्रेट है, तो फ़्लिकरिंग लूप या लेआउट से जुड़ी समस्याएं हो सकती हैं.
  • फ़ोल्ड किए जा सकने वाले फ़्लिप फ़ोन: फ़ोल्ड किए जा सकने वाले फ़्लिप फ़ोन, आम तौर पर पोर्ट्रेट ओरिएंटेशन में होते हैं. हालांकि, फ़ोल्ड किए जाने पर, फ़ोन में आम तौर पर लैंडस्केप ओरिएंटेशन में छोटा डिसप्ले होता है. ऐप्लिकेशन को डिसप्ले के अलग-अलग ओरिएंटेशन की पहचान करनी चाहिए और उनके हिसाब से काम करना चाहिए.
  • बाहरी डिसप्ले: चुनिंदा डिवाइसों पर, कनेक्ट किए गए बाहरी डिसप्ले पर डेस्कटॉप विंडोइंग सेशन शुरू किया जा सकता है. ऐप्लिकेशन को बाहरी डिसप्ले से, स्क्रीन के साइज़ और रिज़ॉल्यूशन जैसी जानकारी के लिए क्वेरी करनी चाहिए. ऐसा न करने पर, ऐप्लिकेशन डिसप्ले के बारे में गलत अनुमान लगा सकते हैं. इससे ऐप्लिकेशन गलत तरीके से काम कर सकता है.
  • कार के डिसप्ले: कार के ज़्यादातर डिसप्ले लैंडस्केप मोड में होते हैं, लेकिन सभी नहीं. कार के डिसप्ले के लिए पार्क की गई कार के लिए ऐप्लिकेशन डेवलप करना, टैबलेट के लिए ऐप्लिकेशन डेवलप करने जैसा ही है.

साथ काम करने से जुड़ी आम समस्याएं

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

लेटर बॉक्सिंग

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

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

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

समस्या

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

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

  • screenOrientation: इससे किसी ऐप्लिकेशन के लिए, ओरिएंटेशन तय किया जाता है. ऐप्लिकेशन, Activity#setRequestedOrientation() का इस्तेमाल करके, रनटाइम के दौरान भी ओरिएंटेशन सेट कर सकते हैं.

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

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

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

ऑप्टिमाइज़ेशन

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

साथ काम करने से जुड़ी समस्या को हल करने का तरीका

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

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

Android 12 (एपीआई लेवल 31) में, विजेट को बेहतर बनाने के लिए ये सुविधाएं जोड़ी गई हैं. इन्हें डिवाइस बनाने वाली कंपनियां कॉन्फ़िगर कर सकती हैं:

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

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

12L (एपीआई लेवल 32) में, फ़ंक्शन से जुड़े ये सुधार किए गए हैं:

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

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

Android 13 (एपीआई लेवल 33) में, उपयोगकर्ता को जानकारी देने वाला एक डायलॉग बॉक्स जोड़ा गया है. इसमें, लेटरबॉक्स वाले ऐप्लिकेशन को स्क्रीन पर पोज़िशन करने या स्प्लिट-स्क्रीन मोड में लेटरबॉक्स को शामिल करने के बारे में बताया गया है:

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

साइज़ कंपैटिबिलिटी मोड

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

डिवाइस के कॉन्फ़िगरेशन में किए गए ऐसे बदलाव जिनकी वजह से साइज़ के साथ काम करने वाला मोड चालू हो सकता है:

  • डिवाइस को घुमाना
  • फ़ोल्ड किया जा सकने वाला डिवाइस फ़ोल्ड या अनफ़ोल्ड किया जा रहा है
  • फ़ुल स्क्रीन और स्प्लिट-स्क्रीन डिसप्ले मोड के बीच स्विच करना

समस्या

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

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

  • resizeableActivity="true" की मदद से, इसका साइज़ बदला जा सकता है
  • पिक्चर में पिक्चर (पीआईपी) मोड की सुविधा
  • एम्बेड किया गया है
  • डिवाइस बनाने वाली कंपनी ने हर ऐप्लिकेशन के लिए, FORCE_RESIZE_APP को ओवरराइड करने की सुविधा लागू की है. इससे ऐप्लिकेशन की सेट की गई प्रॉपर्टी को अनदेखा कर दिया जाता है

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

ऑप्टिमाइज़ेशन

ऐप्लिकेशन, सभी डिसप्ले साइज़ के साथ काम करना चाहिए. ऐप्लिकेशन मेनिफ़ेस्ट में, <activity> या <application> एलिमेंट के android:resizeableActivity एट्रिब्यूट को true पर सेट करके, अपने ऐप्लिकेशन का साइज़ बदलने की सुविधा चालू करें. अपने ऐप्लिकेशन के लिए, रिस्पॉन्सिव/अडैप्टिव लेआउट डिज़ाइन करें. ज़्यादा जानकारी के लिए, अलग-अलग डिसप्ले साइज़ के साथ काम करना और मल्टी-विंडो मोड के साथ काम करना लेख पढ़ें.

साथ काम करने से जुड़ी समस्या को हल करने का तरीका

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

डिसप्ले कंपैटबिलिटी मोड

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

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

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

<activity
    android:name=".MyGameActivity"
    android:configChanges="colorMode|touchscreen|density|...">
    ...
</activity>

फ़्लिकरिंग लूप्स

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

समस्या

Android 12 (एपीआई लेवल 31) और इसके बाद के वर्शन पर, डिवाइस बनाने वाली कंपनियां अपने डिवाइसों को इस तरह कॉन्फ़िगर कर सकती हैं कि वे ऐप्लिकेशन के ओरिएंटेशन से जुड़ी पाबंदियों को अनदेखा करें. इसके बजाय, वे कंपैटबिलिटी मोड लागू कर सकती हैं. उदाहरण के लिए, फ़ोल्ड किए जा सकने वाले डिवाइस में, किसी गतिविधि की android:screenOrientation="portrait" सेटिंग को अनदेखा किया जा सकता है. ऐसा तब होता है, जब गतिविधि को डिवाइस की लैंडस्केप टैबलेट-साइज़ वाली इनर स्क्रीन पर दिखाया जाता है.

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

ऐसा तब भी हो सकता है, जब किसी डिवाइस की स्क्रीन का नैचुरल ओरिएंटेशन (Android के हिसाब से सामान्य ओरिएंटेशन) लैंडस्केप हो. इसका मतलब है कि Display#getRotation() को कॉल करने पर, Surface.ROTATION_0 मिलता है, जबकि डिवाइस का आसपेक्ट रेशियो (लंबाई-चौड़ाई का अनुपात) लैंडस्केप होता है. पहले, ऐप्लिकेशन यह मानते थे कि Display.getRotation() = Surface.ROTATION_0 का मतलब है कि डिवाइस पोर्ट्रेट ओरिएंटेशन में है. हालांकि, ऐसा हमेशा नहीं होता. उदाहरण के लिए, फ़ोल्ड किए जा सकने वाले कुछ डिवाइसों की अंदरूनी स्क्रीन और कुछ टैबलेट पर ऐसा नहीं होता.

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

ऑप्टिमाइज़ेशन

ऐप्लिकेशन को ये काम नहीं करने चाहिए:

  • onCreate() तरीके में Activity#setRequestedOrientation() का इस्तेमाल करके, डिफ़ॉल्ट ओरिएंटेशन सेट करें. ऐसा इसलिए, क्योंकि कॉन्फ़िगरेशन में किए गए ऐसे बदलाव जिन्हें मैनेज नहीं किया गया है उनकी वजह से, ओरिएंटेशन का अनुरोध अचानक ट्रिगर हो सकता है
  • मान लें कि डिवाइस (ROTATION_0) का नैचुरल ओरिएंटेशन पोर्ट्रेट है
  • मौजूदा विंडो के साइज़ से जुड़े सिग्नल के आधार पर ओरिएंटेशन सेट किया गया है. जैसे, Display#getRotation(), FoldingFeature की मौजूदगी या इस्तेमाल से बाहर किए गए एपीआई.

साथ काम करने से जुड़ी समस्या को हल करने का तरीका

Android, इन स्थितियों में Activity#setRequestedOrientation() को किए गए कॉल को अनदेखा करता है:

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

    डिवाइस बनाने वाली कंपनियां, OVERRIDE_ENABLE_COMPAT_IGNORE_REQUESTED_ORIENTATION का इस्तेमाल करके, किसी ऐप्लिकेशन पर यह सेटिंग लागू कर सकती हैं.

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

    डिवाइस बनाने वाली कंपनियां, OVERRIDE_ENABLE_COMPAT_IGNORE_ORIENTATION_REQUEST_WHEN_LOOP_DETECTED का इस्तेमाल करके, किसी ऐप्लिकेशन पर यह सेटिंग लागू कर सकती हैं.

  • वर्चुअल डिवाइस के मालिकों ने चुनिंदा डिवाइसों पर, कॉल करने के तरीके को बदल दिया है.

कैमरे से मिल रही झलक

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

डेस्कटॉप विंडोइंग में कैमरे की झलक भी देखें.

समस्या

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

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

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

ऑप्टिमाइज़ेशन

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

साथ काम करने से जुड़ी समस्या को हल करने का तरीका

जब Display#getRotation(), Surface.ROTATION_0 दिखाता है, तब डिवाइस नैचुरल ओरिएंटेशन में होता है. सिस्टम, डिवाइस के नैचुरल ओरिएंटेशन से CameraCharacteristics.SENSOR_ORIENTATION का हिसाब लगाता है. Android, पोर्ट्रेट मोड में चलने वाले ऐप्लिकेशन की पोर्ट्रेट विंडो को डिवाइस के नैचुरल ओरिएंटेशन के साथ अलाइन करता है. ज़्यादातर ऐप्लिकेशन इसी तरह काम करते हैं. Android, कैमरा सेंसर की इमेज को तब भी काटता है, जब सेंसर का ओरिएंटेशन लैंडस्केप हो और कैमरे की झलक पोर्ट्रेट हो. समस्या को हल करने के लिए, ये तरीके अपनाए जा सकते हैं:

  • सिर्फ़ पोर्ट्रेट मोड में काम करने वाले ऐप्लिकेशन के लिए, कैमरे की झलक को ज़बरदस्ती घुमाना: सिर्फ़ पोर्ट्रेट ओरिएंटेशन में काम करने वाले ऐप्लिकेशन के लिए, डिवाइस का ओरिएंटेशन और कैमरा सेंसर का ओरिएंटेशन पोर्ट्रेट होना चाहिए. हालांकि, Android 12 (एपीआई लेवल 31) और इसके बाद के वर्शन पर, ऐप्लिकेशन को डिवाइस के कई ओरिएंटेशन में चलाया जा सकता है. ऐसा तब होता है, जब डिवाइस बनाने वाली कंपनियां ओरिएंटेशन की खास जानकारी को अनदेखा कर देती हैं.

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

    कुछ टैबलेट (वर्चुअल डिवाइस देखें) पर, ऐप्लिकेशन की पोर्ट्रेट विंडो को फ़ुल स्क्रीन पोर्ट्रेट में घुमाया जाता है, ताकि वह डिवाइस के ओरिएंटेशन के साथ अलाइन हो सके. ज़बरदस्ती रोटेट करने के बाद, ऐप्लिकेशन फ़ुल स्क्रीन पर दिखता है.

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

  • इनर फ़्रंट कैमरे से ली गई फ़ोटो को क्रॉप करना: फ़ोल्ड किए जा सकने वाले कुछ डिवाइसों में, इनर फ़्रंट कैमरे का सेंसर लैंडस्केप ओरिएंटेशन में होता है. फ़ोल्ड किए जा सकने वाले इनर डिसप्ले पर कैमरे की झलक को ज़बरदस्ती घुमाने के अलावा, Android इनर फ़्रंट (लैंडस्केप) कैमरे के फ़ील्ड ऑफ़ व्यू को काट देता है. इससे सेंसर, डिवाइस के ओरिएंटेशन के उलट व्यू कैप्चर करता है.

  • कैमरे की झलक को ज़बरदस्ती रीफ़्रेश करना: ज़बरदस्ती रोटेट करने के बाद, सिस्टम ऐक्टिविटी के तरीकों onStop() और onStart() (डिफ़ॉल्ट रूप से) या onPause() और onResume() (हर ऐप्लिकेशन के लिए, OVERRIDE_CAMERA_COMPAT_ENABLE_REFRESH_VIA_PAUSE को बदलने की सुविधा से लागू किया गया) को साइकल करता है. इससे यह पक्का किया जाता है कि कैमरे की झलक सही तरीके से दिखे.

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

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

आम तौर पर गलत तरीके से इस्तेमाल किए जाने वाले एपीआई

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

कुछ View एपीआई, खास कामों के लिए डिज़ाइन किए गए हैं. डेवलपर को हमेशा इनके बारे में पूरी जानकारी नहीं होती.

समस्या

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

ऐसे Display API जिनका इस्तेमाल बंद कर दिया गया है और जिनका आम तौर पर गलत इस्तेमाल किया जाता है:

ज़्यादा जानकारी के लिए, मल्टी-विंडो मोड के साथ काम करना लेख पढ़ें.

व्यू एपीआई का गलत इस्तेमाल:

ऑप्टिमाइज़ेशन

यूज़र इंटरफ़ेस (यूआई) एलिमेंट की पोज़िशन तय करने के लिए, कभी भी डिसप्ले के साइज़ पर भरोसा न करें. अपने ऐप्लिकेशन को WindowMetrics पर आधारित एपीआई पर माइग्रेट करें. इनमें ये WindowManager एपीआई शामिल हैं:

साथ काम करने से जुड़ी समस्या को हल करने का तरीका

दो ओवरराइड, अब काम न करने वाले Display एपीआई और गलत तरीके से इस्तेमाल किए गए View एपीआई में बदलाव करते हैं, ताकि ऐप्लिकेशन के बाउंड दिखाए जा सकें: Display एपीआई के लिए ALWAYS_SANDBOX_DISPLAY_APIS; View एपीआई के लिए OVERRIDE_SANDBOX_VIEW_BOUNDS_APIS. ALWAYS_SANDBOX_DISPLAY_APIS को डिफ़ॉल्ट रूप से उन ऐप्लिकेशन पर भी लागू किया जाता है जो साइज़ कंपैटबिलिटी मोड की ज़रूरी शर्तें पूरी करते हैं.

पारदर्शी गतिविधियां

पारदर्शी बैकग्राउंड स्टाइल की वजह से, पारदर्शी गतिविधियां होती हैं. उदाहरण के लिए:

<style name="Transparent" parent="AppTheme">
    <item name="android:windowIsTranslucent">true</item>
    <item name="android:windowBackground">@android:color/transparent</item>
</style>

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

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

समस्या

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

ऑप्टिमाइज़ेशन

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

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

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

गोल बॉर्डर

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

अनुमति वाले डायलॉग, उपलब्ध डिसप्ले स्पेस को नहीं भरते. इसकी वजह यह है कि डायलॉग लेआउट में आम तौर पर, LayoutParams.MATCH_PARENT के बजाय LayoutParams.WRAP_CONTENT का इस्तेमाल किया जाता है.

साथ काम करने से जुड़ी समस्या को हल करने का तरीका

डायलॉग बॉक्स लॉन्च करने वाली गतिविधियों को तब तक दिखाएं, जब तक उपयोगकर्ता डायलॉग बॉक्स का जवाब न दे दे.

सिस्टम यह पक्का करता है कि पारदर्शी गतिविधि, गतिविधि स्टैक में पारदर्शी गतिविधि के नीचे मौजूद पहली अपारदर्शी गतिविधि से सभी पाबंदियों को इनहेरिट करे. इनमें ये पाबंदियां शामिल हैं:

  • साइज़ कंपैटिबिलिटी मोड
  • ओरिएंटेशन
  • आसपेक्ट रेशियो (लंबाई-चौड़ाई का अनुपात)

Unity गेम

Unity गेम, Android पर फ़ुल स्क्रीन या मल्टी‑विंडो मोड में चलते हैं. हालांकि, जब ऐप्लिकेशन को मल्टी-विंडो मोड में रखा जाता है, तो Unity के कई गेम फ़ोकस खो देते हैं और कॉन्टेंट दिखाना बंद कर देते हैं.

समस्या

Unity ने Unity 2019.4 में Resizable Window विकल्प जोड़ा है, ताकि Android पर मल्टी-विंडो मोड का इस्तेमाल किया जा सके. हालांकि, शुरुआती सेटअप, मल्टी-विंडो मोड में गतिविधि पूरी होने की प्रोसेस पर सही तरीके से प्रतिक्रिया नहीं देता था. इस वजह से, ऐप्लिकेशन पर फ़ोकस न होने पर, UnityPlayer वीडियो चलाना बंद कर देता था. प्लेयर ने काली स्क्रीन या गेम का आखिरी, फ़्रीज़ किया गया फ़्रेम रेंडर किया. गेमप्ले सिर्फ़ तब फिर से शुरू हुआ, जब उपयोगकर्ता ने स्क्रीन पर टैप किया. Unity इंजन का इस्तेमाल करने वाले कई ऐप्लिकेशन को इस समस्या का सामना करना पड़ता है. साथ ही, मल्टी-विंडो मोड में ये ऐप्लिकेशन काली विंडो के तौर पर रेंडर होते हैं.

ऑप्टिमाइज़ेशन

Unity को 2019.4.40 या इसके बाद के वर्शन पर अपग्रेड करें और अपने गेम को फिर से एक्सपोर्ट करें. Android प्लेयर की सेटिंग में, Resizable Window विकल्प को चुने रहने दें. ऐसा न करने पर, गेम फ़ोकस में न होने पर रुक जाता है. भले ही, गेम मल्टी-विंडो मोड में पूरी तरह से दिख रहा हो.

साथ काम करने से जुड़ी समस्या को हल करने का तरीका

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

डेस्कटॉप विंडोविंग

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

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

पोर्ट्रेट मोड में मौजूद ऐप्लिकेशन का साइज़ बदलकर, लैंडस्केप मोड में करने का ऐनिमेशन.

हालांकि, अगर किसी गतिविधि को रीसाइज़ न किए जा सकने वाले (resizeableActivity = false) के तौर पर एलान किया जाता है, तो गतिविधि का यूज़र इंटरफ़ेस (यूआई) उसी आसपेक्ट रेशियो (लंबाई-चौड़ाई का अनुपात) को बनाए रखते हुए स्केल होता है.

ऐप्लिकेशन का साइज़ बदलने का ऐनिमेशन. यूज़र इंटरफ़ेस (यूआई) का साइज़, डेस्कटॉप विंडो के हिसाब से बदलता है.

डेस्कटॉप विंडोइंग में कैमरे की झलक

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

समस्या

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

ऑप्टिमाइज़ेशन

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

साथ काम करने से जुड़ी समस्या को हल करने का तरीका

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

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

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

  • डिसप्ले रोटेशन को सैंडबॉक्स करना: यह ट्रीटमेंट, डिवाइस को अनुरोध किए गए ओरिएंटेशन में सिम्युलेट करता है. कैमरे की झलक के लिए सबसे आम गलत अनुमान यह है कि ऐप्लिकेशन, पोर्ट्रेट डिवाइस पर चल रहा है. इसलिए, पोर्ट्रेट ओरिएंटेशन का अनुरोध करने वाले ऐप्लिकेशन के लिए, डिसप्ले रोटेशन को 0 डिग्री पर सैंडबॉक्स किया जाता है. वहीं, लैंडस्केप ओरिएंटेशन का अनुरोध करने वाले डिवाइसों के लिए, इसे 90 डिग्री पर सैंडबॉक्स किया जाता है.

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

  • कैमरा फ़ीड को घुमाना और काटना: सिस्टम, गतिविधि के तरीकों onStop() और onStart() (डिफ़ॉल्ट रूप से) या onPause() और onResume() (हर ऐप्लिकेशन के लिए OVERRIDE_CAMERA_COMPAT_ENABLE_REFRESH_VIA_PAUSE को लागू करके) के ज़रिए साइकल करता है. ऐसा, ट्रीटमेंट लागू होने के बाद किया जाता है, ताकि यह पक्का किया जा सके कि कैमरे की झलक सही तरीके से दिख रही है.

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

साइज़ बदला जा रहा है

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

साथ काम करने से जुड़ी समस्याओं के लिए अपने ऐप्लिकेशन की जांच करना

अपने ऐप्लिकेशन को टेस्ट करने और यह समझने के लिए कि वह अलग-अलग फ़ॉर्म फ़ैक्टर पर कैसे काम करता है, इन संसाधनों का फ़ायदा लें:

क्या लेटरबॉक्स किया गया है

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

Kotlin

fun isLetterboxed(activity: AppCompatActivity): Boolean {
    if (isInMultiWindowMode) return false

    val wmc = WindowMetricsCalculator.getOrCreate()
    val currentBounds = wmc.computeCurrentWindowMetrics(this).bounds
    val maxBounds = wmc.computeMaximumWindowMetrics(this).bounds

    val isScreenPortrait = maxBounds.height() > maxBounds.width()

    return if (isScreenPortrait) {
        currentBounds.height() < maxBounds.height()
    } else {
        currentBounds.width() < maxBounds.width()
    }
}

Java

public boolean isLetterboxed(AppCompatActivity activity) {
    if (activity.isInMultiWindowMode()) {
        return false;
    }

    WindowMetricsCalculator wmc = WindowMetricsCalculator.getOrCreate();
    Rect currentBounds = wmc.computeCurrentWindowMetrics(activity).getBounds();
    Rect maxBounds = wmc.computeMaximumWindowMetrics(activity).getBounds();

    boolean isScreenPortrait = maxBounds.height() > maxBounds.width();

    return (isScreenPortrait)
        ? currentBounds.height() < maxBounds.height()
        : currentBounds.width() < maxBounds.width();
}

इसके बाद, टेस्ट चलाकर यह पक्का करें कि टारगेट की गई गतिविधि लेटरबॉक्स न हो:

Kotlin

@get:Rule
val activityRule = ActivityScenarioRule(MainActivity::class.java)

@Test
fun activity_launched_notLetterBoxed() {
    activityRule.scenario.onActivity {
        assertFalse(it.isLetterboxed())
    }
}

Java

@Rule
public ActivityScenarioRule<MainActivity> rule = new ActivityScenarioRule<>(MainActivity.class);

@Test
public void activity_launched_notLetterBoxed() {
    try (ActivityScenario<MainActivity> scenario =
        ActivityScenario.launch(MainActivity.class)) {
            scenario.onActivity( activity -> {
                assertFalse(activity.isLetterboxed());
            });
        }
}

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

हर ऐप्लिकेशन के लिए सेटिंग में बदलाव करना

Android, ओवरराइड की सुविधा देता है. इससे ऐप्लिकेशन के कॉन्फ़िगर किए गए व्यवहार में बदलाव किया जा सकता है. उदाहरण के लिए, FORCE_RESIZE_APP ओवरराइड, सिस्टम को साइज़ कंपैटबिलिटी मोड को बायपास करने और डिसप्ले डाइमेंशन के हिसाब से ऐप्लिकेशन का साइज़ बदलने का निर्देश देता है. भले ही, ऐप्लिकेशन मेनिफ़ेस्ट में resizeableActivity="false" की जानकारी दी गई हो.

डिवाइस बनाने वाली कंपनियां, कुछ डिवाइसों पर चुनिंदा ऐप्लिकेशन या सभी ऐप्लिकेशन के लिए ओवरराइड लागू करती हैं. Android 14 (एपीआई लेवल 34) और इसके बाद के वर्शन पर, उपयोगकर्ता डिवाइस की सेटिंग में जाकर, ऐप्लिकेशन के लिए ओवरराइड लागू कर सकते हैं. Android 16 (एपीआई लेवल 36) और इसके बाद के वर्शन पर, वर्चुअल डिवाइस के मालिक उन चुनिंदा डिवाइसों पर ओवरराइड लागू करते हैं जिन्हें वे मैनेज करते हैं.

हर ऐप्लिकेशन के लिए, उपयोगकर्ता के हिसाब से ओवरराइड

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

मेन्यू में, डिवाइस पर इंस्टॉल किए गए सभी ऐप्लिकेशन की सूची होती है. उपयोगकर्ता कोई ऐप्लिकेशन चुनते हैं और फिर ऐप्लिकेशन के आसपेक्ट रेशियो (लंबाई-चौड़ाई का अनुपात) को 3:4, 1:1, फ़ुल स्क्रीन या डिवाइस बनाने वाली कंपनी की ओर से कॉन्फ़िगर की गई अन्य वैल्यू पर सेट करते हैं. उपयोगकर्ता, आसपेक्ट रेशियो को ऐप्लिकेशन के डिफ़ॉल्ट आसपेक्ट रेशियो पर भी रीसेट कर सकते हैं. यह ऐप्लिकेशन मेनिफ़ेस्ट में बताया जाता है.

ऐप्लिकेशन, इन PackageManager.Property टैग को सेट करके, साथ काम करने की सुविधा को बदलने की प्रोसेस से ऑप्ट आउट कर सकते हैं:

  • PROPERTY_COMPAT_ALLOW_USER_ASPECT_RATIO_OVERRIDE

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

    <application>
        <property
            android:name="android.window.
            PROPERTY_COMPAT_ALLOW_USER_ASPECT_RATIO_OVERRIDE"
            android:value="false" />
    </application>
    

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

    प्रॉपर्टी को true पर सेट करने से कोई असर नहीं पड़ता.

  • PROPERTY_COMPAT_ALLOW_USER_ASPECT_RATIO_FULLSCREEN_OVERRIDE

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

    <application>
        <property
            android:name="android.window.PROPERTY_COMPAT_ALLOW_USER_ASPECT_RATIO_FULLSCREEN_OVERRIDE"
            android:value="false" />
    </application>
    

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

    इस प्रॉपर्टी को true पर सेट करने से कोई असर नहीं पड़ता.

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

डिवाइस पर हर ऐप्लिकेशन के लिए सेटिंग में बदलाव

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

ऐप्लिकेशन, ज़्यादातर बदलावों से ऑप्ट आउट कर सकते हैं. इसके लिए, नीचे दी गई हर ऐप्लिकेशन के लिए बदलाव टेबल देखें.

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

Android डीबग ब्रिज (एडीबी) का इस्तेमाल करके भी, बदलावों को चालू या बंद किया जा सकता है. साथ ही, यह तय किया जा सकता है कि आपके ऐप्लिकेशन पर कौनसे बदलाव लागू होंगे.

ओवरराइड की सुविधा को चालू या बंद करने के लिए, यह तरीका अपनाएं:

adb shell am compat enable/disable <override name/id> <package>

वर्चुअल डिवाइसों के लिए, देखें कि आपके ऐप्लिकेशन पर कौनसे ओवरराइड लागू होते हैं:

adb shell dumpsys platform_compat | grep <package name>

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

हर ऐप्लिकेशन के लिए सेटिंग में बदलाव करना
प्रकार नाम आईडी ब्यौरा
इनपुट कंपैटिबिलिटी OVERRIDE_MOUSE_TO_TOUCH 413207127 यह माउस डिवाइस से मिले MotionEvent इंस्टेंस को टच इवेंट में बदलता है. इसके लिए, ऐप्लिकेशन को डिलीवर किए जाने पर, MotionEvent सोर्स और टूल टाइप को फिर से लिखा जाता है.
साइज़ बदलने की सुविधा FORCE_RESIZE_APP 174042936 कॉन्फ़िगरेशन में बदलाव होने पर, ऐप्लिकेशन के लिए साइज़ के साथ काम करने वाले मोड को बायपास करता है.
FORCE_NON_RESIZE_APP 181136395 कॉन्फ़िगरेशन में बदलाव होने पर, ऐप्लिकेशन को साइज़ कंपैटबिलिटी मोड में चलने के लिए मजबूर करता है.
आसपेक्ट रेशियो OVERRIDE_MIN_ASPECT_RATIO 174042980 Gatekeeper override, जिसे किसी अन्य आसपेक्ट रेशियो (लंबाई-चौड़ाई का अनुपात) को बदलने की सुविधा लागू करने के लिए चालू करना ज़रूरी है.
OVERRIDE_MIN_ASPECT_RATIO_PORTRAIT_ONLY 203647190 अगर यह सेटिंग चालू है (डिफ़ॉल्ट रूप से), तो ओवरराइड का दायरा सिर्फ़ पोर्ट्रेट मोड वाली गतिविधियों तक सीमित हो जाता है.
OVERRIDE_MIN_ASPECT_RATIO_SMALL 349045028 इससे कम से कम आसपेक्ट रेशियो (लंबाई-चौड़ाई का अनुपात) बदलकर 4:3 हो जाता है.
OVERRIDE_MIN_ASPECT_RATIO_MEDIUM 180326845 इससे कम से कम आसपेक्ट रेशियो (लंबाई-चौड़ाई का अनुपात) बदलकर 3:2 हो जाता है.
OVERRIDE_MIN_ASPECT_RATIO_LARGE 180326787 इससे कम से कम आसपेक्ट रेशियो (लंबाई-चौड़ाई का अनुपात) बदलकर 16:9 हो जाता है.
OVERRIDE_MIN_ASPECT_RATIO_TO_ALIGN_WITH_SPLIT_SCREEN 208648326 यह कम से कम आसपेक्ट रेशियो को बदलकर, डिसप्ले के साइज़ के 50% हिस्से (या स्प्लिट-स्क्रीन के आसपेक्ट रेशियो) में फ़िट कर देता है.
OVERRIDE_MIN_ASPECT_RATIO_EXCLUDE_PORTRAIT_FULLSCREEN 218959984 यह सेटिंग, कम से कम आसपेक्ट रेशियो (लंबाई-चौड़ाई का अनुपात) को बदलने की सुविधा बंद कर देती है, ताकि डिवाइस के पोर्ट्रेट मोड में होने पर ऐप्लिकेशन फ़ुल स्क्रीन में दिखें.
ओरिएंटेशन OVERRIDE_ANY_ORIENTATION 265464455 इससे किसी भी ओरिएंटेशन को बदला जा सकता है.
OVERRIDE_ANY_ORIENTATION_TO_USER 310816437 यह ओरिएंटेशन, साइज़ बदलने, और आसपेक्ट रेशियो (लंबाई-चौड़ाई का अनुपात) से जुड़ी पाबंदियों को बदल देता है.
OVERRIDE_UNDEFINED_ORIENTATION_TO_PORTRAIT 265452344 अगर किसी गतिविधि का ओरिएंटेशन तय नहीं है, तो यह नीति ओरिएंटेशन को पोर्ट्रेट मोड में बदल देती है.
OVERRIDE_UNDEFINED_ORIENTATION_TO_NOSENSOR 265451093 अगर किसी गतिविधि के लिए ओरिएंटेशन तय नहीं किया गया है, तो ओरिएंटेशन को बदलकर nosensor (डिवाइस के नैचुरल ओरिएंटेशन का इस्तेमाल करें) कर देता है.
OVERRIDE_LANDSCAPE_ORIENTATION_TO_REVERSE_LANDSCAPE 266124927 सिर्फ़ लैंडस्केप मोड में काम करने वाले ऐप्लिकेशन को 180 डिग्री घुमाता है.
OVERRIDE_ORIENTATION_ONLY_FOR_CAMERA 265456536 ओरिएंटेशन बदलने की सुविधा का दायरा तब तक सीमित रहता है, जब तक ऐप्लिकेशन कैमरे से कनेक्ट रहता है.
OVERRIDE_USE_DISPLAY_LANDSCAPE_NATURAL_ORIENTATION 255940284 जब कोई टास्क फ़ुल स्क्रीन पर होता है, तो डिसप्ले को फ़िक्स्ड लैंडस्केप नैचुरल ओरिएंटेशन पर सेट करता है. इसमें लेटरबॉक्स वाला टास्क भी शामिल है.
OVERRIDE_ENABLE_COMPAT_IGNORE_REQUESTED_ORIENTATION 254631730 ऐप्लिकेशन से ओरिएंटेशन के अनुरोधों को अनदेखा करता है, ताकि रोटेशन के इनफ़ाइनाइट लूप से बचा जा सके.
OVERRIDE_ENABLE_COMPAT_IGNORE_ORIENTATION_REQUEST_WHEN_LOOP_DETECTED 273509367 किसी गतिविधि को फिर से लॉन्च करते समय, ओरिएंटेशन के बार-बार किए जाने वाले अनुरोधों को अनदेखा करता है. अगर Android को पता चलता है कि कोई ऐप्लिकेशन एक सेकंड में कम से कम दो नए ओरिएंटेशन का अनुरोध कर रहा है, तो सिस्टम इसे रोटेशन इनफ़ाइनाइट लूप मानता है और ओवरराइड लागू करता है.
OVERRIDE_RESPECT_REQUESTED_ORIENTATION 236283604 यह सेटिंग, डिवाइस बनाने वाली कंपनी की ओरिएंटेशन के अनुरोध को अनदेखा करने की सेटिंग को बंद करके, लेटरबॉक्सिंग को रोकती है.
सैंडबॉक्स एपीआई NEVER_SANDBOX_DISPLAY_APIS 184838306 यह किसी भी डिसप्ले एपीआई के काम करने के तरीके में बदलाव करने से रोकता है.
ALWAYS_SANDBOX_DISPLAY_APIS 185004937 ऐप्लिकेशन में Display एपीआई को, ऐप्लिकेशन के बाउंड दिखाने के लिए मजबूर करता है. Display एपीआई, लॉजिकल डिसप्ले एरिया की सीमाएं दिखाते हैं. हालांकि, कभी-कभी ऐप्लिकेशन यह मान लेता है कि Display एपीआई, ऐप्लिकेशन की सीमाएं दिखाते हैं. इससे यूज़र इंटरफ़ेस (यूआई) से जुड़ी समस्याएं होती हैं.
OVERRIDE_SANDBOX_VIEW_BOUNDS_APIS 237531167 यह ऐप्लिकेशन में इस्तेमाल किए गए View एपीआई को, ऐप्लिकेशन के बाउंड दिखाने के लिए मजबूर करता है. View एपीआई, लॉजिकल डिसप्ले एरिया की सीमाएं दिखाते हैं. हालांकि, कभी-कभी ऐप्लिकेशन यह मान लेता है कि View एपीआई, ऐप्लिकेशन की सीमाएं दिखाते हैं. इससे यूज़र इंटरफ़ेस (यूआई) से जुड़ी समस्याएं होती हैं.
कैमरे के साथ काम करने की सुविधा OVERRIDE_CAMERA_COMPAT_DISABLE_FORCE_ROTATION 263959004 इससे स्क्रीन को ज़बरदस्ती घुमाने की सुविधा बंद हो जाती है. डिफ़ॉल्ट रूप से, कैमरे की झलक दिखने पर, फ़िक्स्ड ओरिएंटेशन वाले सभी कैमरा ऐप्लिकेशन को ज़बरदस्ती घुमाया जाता है.
OVERRIDE_CAMERA_COMPAT_DISABLE_SIMULATE_REQUESTED_ORIENTATION 398195815 इससे, कैमरे के साथ काम करने की क्षमता के लिए, अनुरोध किए गए ओरिएंटेशन ट्रीटमेंट को सिम्युलेट करने की सुविधा बंद हो जाती है. कैमरे की झलक दिखने पर, फ़िक्स्ड-ओरिएंटेशन वाले कैमरा ऐप्लिकेशन, डिफ़ॉल्ट रूप से उनके अनुरोध किए गए ओरिएंटेशन के हिसाब से अडजस्ट हो जाते हैं.
OVERRIDE_CAMERA_COMPAT_DISABLE_REFRESH 264304459 कैमरे की झलक को ज़बरदस्ती घुमाने पर, लागू होने वाले डिफ़ॉल्ट हार्ड रीफ़्रेश को हटा देता है.
OVERRIDE_CAMERA_COMPAT_ENABLE_REFRESH_VIA_PAUSE 264301586 कैमरे की झलक को ज़बरदस्ती घुमाने पर, हार्ड रीफ़्रेश को सॉफ़्ट रीफ़्रेश में बदल देता है. इससे, ज़बरदस्ती घुमाने के दौरान स्थिति को बनाए रखने में मदद मिलती है. डिफ़ॉल्ट रूप से, जब कैमरे की झलक को ज़बरदस्ती घुमाया जाता है, तो Android उसे हार्ड रीफ़्रेश करता है. हार्ड रीफ़्रेश करने से, ऐप्लिकेशन की स्थिति खोने या ब्लैक आउट होने की समस्याएं हो सकती हैं. यह इस बात पर निर्भर करता है कि ऐप्लिकेशन ने अपनी पिछली स्थिति को कैसे कैश मेमोरी में सेव किया है.
OVERRIDE_CAMERA_LANDSCAPE_TO_PORTRAIT 250678880 इनर फ़्रंट कैमरे के इमेज बफ़र को क्रॉप करता है. अगर ओवरराइड की सुविधा बंद है, तो सामने वाले इनर कैमरे से ली गई फ़ोटो को क्रॉप करने की सुविधा हटा दी जाती है. साथ ही, कैमरे की झलक का फ़ील्ड ऑफ़ व्यू (कैमरे से दिख रहा व्यू) बढ़ जाता है. फ़ोल्ड किए जा सकने वाले कुछ डिवाइसों (वर्चुअल डिवाइस देखें) पर, डिफ़ॉल्ट रूप से सिस्टम, अंदर वाले फ़्रंट कैमरे का इस्तेमाल करते समय सभी कैमरा ऐप्लिकेशन के कैमरा की झलक को काट देता है.
अन्य चीज़ें OVERRIDE_ENABLE_COMPAT_FAKE_FOCUS 263259275 स्प्लिट-स्क्रीन मोड में ऐप्लिकेशन से फ़ोकस हटने पर, ऐप्लिकेशन को ब्लैक आउट होने से रोकता है. ऐप्लिकेशन, कॉन्टेंट दिखाने से पहले फ़ोकस होने का इंतज़ार करता है. इससे ऐप्लिकेशन फ़्रीज़ हो सकता है या उसकी स्क्रीन ब्लैक हो सकती है. इस बदलाव की मदद से, Android ऐप्लिकेशन को फ़ोकस का नकली इवेंट भेजता है. इससे ऐप्लिकेशन को फिर से कॉन्टेंट दिखाने का सिग्नल मिलता है.
OVERRIDE_EXCLUDE_CAPTION_INSETS_FROM_APP_BOUNDS 388014743 डेस्कटॉप विंडोइंग में गतिविधि कॉन्फ़िगरेशन में, ऐप्लिकेशन की सीमाओं से कैप्शन बार के इनसेट को बाहर रखता है. इससे, कैप्शन बार से ऐप्लिकेशन के यूज़र इंटरफ़ेस (यूआई) के सबसे ऊपर या सबसे नीचे मौजूद एलिमेंट को छिपने या क्रॉप होने से रोका जा सकता है. ऐसा तब होता है, जब ऐप्लिकेशन, कैप्शन बार के इनसेट को हैंडल नहीं करता.

OVERRIDE_MOUSE_TO_TOUCH

यह कंपैटबिलिटी ट्रीटमेंट को चालू करता है. इससे, ऐप्लिकेशन को मोशन इवेंट डिलीवर होने पर, माउस या टचपैड से MotionEvent इंस्टेंस को टच इवेंट में बदल दिया जाता है. इसके लिए, MotionEvent सोर्स को SOURCE_TOUCHSCREEN और MotionEvent टूल टाइप को TOOL_TYPE_FINGER में फिर से लिखा जाता है.

ऐप्लिकेशन, ओवरराइड करने जैसा नतीजा कैसे हासिल कर सकते हैं

लागू नहीं. समस्या को ऐप्लिकेशन लॉजिक में हल किया जाना चाहिए.

ऐप्लिकेशन ऑप्टिमाइज़ करने का तरीका

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

ओवरराइड की सुविधा को बंद करने या इससे ऑप्ट आउट करने का तरीका

ऐप्लिकेशन के मेनिफ़ेस्ट में, <uses-feature> एलिमेंट में FEATURE_PC का एलान करें.

<uses-feature android:name="android.hardware.type.pc"
              android:required="false" />

ध्यान दें: android:required="false" सेट करें, ताकि पीसी की सुविधा ज़रूरी न हो और Google Play, पीसी के अलावा अन्य डिवाइसों पर ऐप्लिकेशन को न हटाए.

प्रॉपर्टी फ़्लैग, ताकि ओवरराइड को अडजस्ट किया जा सके

कोई नहीं.

ओवरराइड की जांच करने के लिए adb कमांड

ओवरराइड लागू करने के लिए:

adb shell am compat enable OVERRIDE_MOUSE_TO_TOUCH <package>

बदलाव को हटाने के लिए:

adb shell am compat disable OVERRIDE_MOUSE_TO_TOUCH <package>

ध्यान दें: ये निर्देश, कुछ समय के लिए ही ओवरराइड को लागू करते हैं या हटाते हैं.

FORCE_RESIZE_APP

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

ऐप्लिकेशन, ओवरराइड करने जैसा नतीजा कैसे हासिल कर सकते हैं

ऐप्लिकेशन मेनिफ़ेस्ट में, android:resizeableActivity एट्रिब्यूट को true पर सेट करें.

ऐप्लिकेशन ऑप्टिमाइज़ करने का तरीका

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

ओवरराइड की सुविधा को बंद करने या इससे ऑप्ट आउट करने का तरीका

प्रॉपर्टी फ़्लैग PROPERTY_COMPAT_ALLOW_RESIZEABLE_ACTIVITY_OVERRIDES को false पर सेट करें.

प्रॉपर्टी फ़्लैग, ताकि ओवरराइड को अडजस्ट किया जा सके

<property android:name="android.window.PROPERTY_COMPAT_ALLOW_RESIZEABLE_ACTIVITY_OVERRIDES"
  android:value="true|false"/>

ओवरराइड की जांच करने के लिए adb कमांड

ओवरराइड लागू करने और ऐप्लिकेशन का साइज़ बदलने की सुविधा चालू करने के लिए:

adb shell am compat enable FORCE_RESIZE_APP <package>

बदलाव को हटाने के लिए:

adb shell am compat disable FORCE_RESIZE_APP <package>

ध्यान दें: ये निर्देश, कुछ समय के लिए ही ओवरराइड को लागू करते हैं या हटाते हैं.

FORCE_NON_RESIZE_APP

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

ऐप्लिकेशन, ओवरराइड करने जैसा नतीजा कैसे हासिल कर सकते हैं

ऐप्लिकेशन मेनिफ़ेस्ट में, android:resizeableActivity एट्रिब्यूट और android.supports_size_changes मेटाडेटा फ़्लैग, दोनों को false पर सेट करें. साथ ही, ओरिएंटेशन या आसपेक्ट रेशियो (लंबाई-चौड़ाई का अनुपात) से जुड़ी पाबंदी के बारे में बताएं.

ऐप्लिकेशन ऑप्टिमाइज़ करने का तरीका

साइज़ बदलने पर सही तरीके से काम करने वाले सभी ऐप्लिकेशन में, android:resizeableActivity या android.supports_size_changes को true पर सेट किया जाना चाहिए. अन्य ऐप्लिकेशन को इस तरह से बेहतर बनाया जाना चाहिए कि साइज़ बदलने पर वे सही तरीके से काम करें. android:resizeableActivity देखें.

ओवरराइड की सुविधा को बंद करने या इससे ऑप्ट आउट करने का तरीका

प्रॉपर्टी फ़्लैग PROPERTY_COMPAT_ALLOW_RESIZEABLE_ACTIVITY_OVERRIDES को false पर सेट करें.

प्रॉपर्टी फ़्लैग, ताकि ओवरराइड को अडजस्ट किया जा सके

<property android:name="android.window.PROPERTY_COMPAT_ALLOW_RESIZEABLE_ACTIVITY_OVERRIDES"
  android:value="true|false"/>

ओवरराइड की जांच करने के लिए adb कमांड

ओवरराइड लागू करने और ऐप्लिकेशन का साइज़ बदलने की सुविधा बंद करने के लिए:

adb shell am compat enable FORCE_NON_RESIZE_APP <package>

बदलाव को हटाने के लिए:

adb shell am compat disable FORCE_NON_RESIZE_APP <package>

ध्यान दें: ये निर्देश, कुछ समय के लिए ही ओवरराइड को लागू करते हैं या हटाते हैं.

OVERRIDE_MIN_ASPECT_RATIO

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

ऐप्लिकेशन, ओवरराइड करने जैसा नतीजा कैसे हासिल कर सकते हैं

गतिविधि या ऐप्लिकेशन लेवल पर android:minAspectRatio सेट करें.

ऐप्लिकेशन ऑप्टिमाइज़ करने का तरीका

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

ओवरराइड की सुविधा को बंद करने या इससे ऑप्ट आउट करने का तरीका

आसपेक्ट रेशियो (लंबाई-चौड़ाई का अनुपात) से जुड़ी पाबंदी तय करें या प्रॉपर्टी फ़्लैग PROPERTY_COMPAT_ALLOW_MIN_ASPECT_RATIO_OVERRIDE को false पर सेट करें.

प्रॉपर्टी फ़्लैग, ताकि ओवरराइड को अडजस्ट किया जा सके

<property android:name="android.window.PROPERTY_COMPAT_ALLOW_MIN_ASPECT_RATIO_OVERRIDE"
  android:value="false"/>

ओवरराइड की जांच करने के लिए adb कमांड

ओवरराइड लागू करने के लिए:

adb shell am compat enable OVERRIDE_MIN_ASPECT_RATIO <package>

बदलाव को हटाने के लिए:

adb shell am compat disable OVERRIDE_MIN_ASPECT_RATIO <package>

ध्यान दें: ये निर्देश, कुछ समय के लिए ही ओवरराइड को लागू करते हैं या हटाते हैं.

OVERRIDE_MIN_ASPECT_RATIO_PORTRAIT_ONLY

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

ऐप्लिकेशन, ओवरराइड करने जैसा नतीजा कैसे हासिल कर सकते हैं

OVERRIDE_MIN_ASPECT_RATIO देखें.

ऐप्लिकेशन ऑप्टिमाइज़ करने का तरीका

OVERRIDE_MIN_ASPECT_RATIO देखें.

ओवरराइड की सुविधा को बंद करने या इससे ऑप्ट आउट करने का तरीका

OVERRIDE_MIN_ASPECT_RATIO देखें.

प्रॉपर्टी फ़्लैग, ताकि ओवरराइड को अडजस्ट किया जा सके

OVERRIDE_MIN_ASPECT_RATIO देखें.

ओवरराइड की जांच करने के लिए adb कमांड

ओवरराइड लागू करने के लिए:

adb shell am compat enable OVERRIDE_MIN_ASPECT_RATIO_PORTRAIT_ONLY <package>

बदलाव को हटाने के लिए:

adb shell am compat disable OVERRIDE_MIN_ASPECT_RATIO_PORTRAIT_ONLY <package>

ध्यान दें: ये निर्देश, कुछ समय के लिए ही ओवरराइड को लागू करते हैं या हटाते हैं.

OVERRIDE_MIN_ASPECT_RATIO_SMALL

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

ऐप्लिकेशन, ओवरराइड करने जैसा नतीजा कैसे हासिल कर सकते हैं

OVERRIDE_MIN_ASPECT_RATIO देखें.

ऐप्लिकेशन ऑप्टिमाइज़ करने का तरीका

OVERRIDE_MIN_ASPECT_RATIO देखें.

ओवरराइड की सुविधा को बंद करने या इससे ऑप्ट आउट करने का तरीका

OVERRIDE_MIN_ASPECT_RATIO देखें.

प्रॉपर्टी फ़्लैग, ताकि ओवरराइड को अडजस्ट किया जा सके

OVERRIDE_MIN_ASPECT_RATIO देखें.

ओवरराइड की जांच करने के लिए adb कमांड

ओवरराइड लागू करने के लिए:

adb shell am compat enable OVERRIDE_MIN_ASPECT_RATIO_SMALL <package>

बदलाव को हटाने के लिए:

adb shell am compat disable OVERRIDE_MIN_ASPECT_RATIO_SMALL <package>

ध्यान दें: ये निर्देश, कुछ समय के लिए ही ओवरराइड को लागू करते हैं या हटाते हैं.

OVERRIDE_MIN_ASPECT_RATIO_MEDIUM

गतिविधि के कम से कम आसपेक्ट रेशियो को मीडियम वैल्यू (3:2) पर सेट करता है.

ऐप्लिकेशन, ओवरराइड करने जैसा नतीजा कैसे हासिल कर सकते हैं

OVERRIDE_MIN_ASPECT_RATIO देखें.

ऐप्लिकेशन ऑप्टिमाइज़ करने का तरीका

OVERRIDE_MIN_ASPECT_RATIO देखें.

ओवरराइड की सुविधा को बंद करने या इससे ऑप्ट आउट करने का तरीका

OVERRIDE_MIN_ASPECT_RATIO देखें.

प्रॉपर्टी फ़्लैग, ताकि ओवरराइड को अडजस्ट किया जा सके

OVERRIDE_MIN_ASPECT_RATIO देखें.

ओवरराइड की जांच करने के लिए adb कमांड

ओवरराइड लागू करने के लिए:

adb shell am compat enable OVERRIDE_MIN_ASPECT_RATIO_MEDIUM <package>

बदलाव को हटाने के लिए:

adb shell am compat disable OVERRIDE_MIN_ASPECT_RATIO_MEDIUM <package>

ध्यान दें: ये निर्देश, कुछ समय के लिए ही ओवरराइड को लागू करते हैं या हटाते हैं.

OVERRIDE_MIN_ASPECT_RATIO_LARGE

गतिविधि के कम से कम आसपेक्ट रेशियो को बड़ी वैल्यू (16:9) पर सेट करता है.

ऐप्लिकेशन, ओवरराइड करने जैसा नतीजा कैसे हासिल कर सकते हैं

OVERRIDE_MIN_ASPECT_RATIO देखें.

ऐप्लिकेशन ऑप्टिमाइज़ करने का तरीका

OVERRIDE_MIN_ASPECT_RATIO देखें.

ओवरराइड की सुविधा को बंद करने या इससे ऑप्ट आउट करने का तरीका

OVERRIDE_MIN_ASPECT_RATIO देखें.

प्रॉपर्टी फ़्लैग, ताकि ओवरराइड को अडजस्ट किया जा सके

OVERRIDE_MIN_ASPECT_RATIO देखें.

ओवरराइड की जांच करने के लिए adb कमांड

ओवरराइड लागू करने के लिए:

adb shell am compat enable OVERRIDE_MIN_ASPECT_RATIO_LARGE <package>

बदलाव को हटाने के लिए:

adb shell am compat disable OVERRIDE_MIN_ASPECT_RATIO_LARGE <package>`

ध्यान दें: ये निर्देश, कुछ समय के लिए ही ओवरराइड को लागू करते हैं या हटाते हैं.

OVERRIDE_MIN_ASPECT_RATIO_TO_ALIGN_WITH_SPLIT_SCREEN

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

ऐप्लिकेशन, ओवरराइड करने जैसा नतीजा कैसे हासिल कर सकते हैं

OVERRIDE_MIN_ASPECT_RATIO देखें.

ऐप्लिकेशन ऑप्टिमाइज़ करने का तरीका

OVERRIDE_MIN_ASPECT_RATIO देखें.

ओवरराइड की सुविधा को बंद करने या इससे ऑप्ट आउट करने का तरीका

OVERRIDE_MIN_ASPECT_RATIO देखें.

प्रॉपर्टी फ़्लैग, ताकि ओवरराइड को अडजस्ट किया जा सके

OVERRIDE_MIN_ASPECT_RATIO देखें.

ओवरराइड की जांच करने के लिए adb कमांड

ओवरराइड लागू करने के लिए:

adb shell am compat enable OVERRIDE_MIN_ASPECT_RATIO_TO_ALIGN_WITH_SPLIT_SCREEN <package>

बदलाव को हटाने के लिए:

adb shell am compat disable OVERRIDE_MIN_ASPECT_RATIO_TO_ALIGN_WITH_SPLIT_SCREEN <package>

ध्यान दें: ये निर्देश, कुछ समय के लिए ही ओवरराइड को लागू करते हैं या हटाते हैं.

OVERRIDE_MIN_ASPECT_RATIO_EXCLUDE_PORTRAIT_FULLSCREEN

पोर्ट्रेट फ़ुल स्क्रीन में कम से कम आसपेक्ट रेशियो की पाबंदी हट जाती है, ताकि स्क्रीन पर मौजूद पूरी जगह का इस्तेमाल किया जा सके.

ऐप्लिकेशन, ओवरराइड करने जैसा नतीजा कैसे हासिल कर सकते हैं

OVERRIDE_MIN_ASPECT_RATIO देखें.

ऐप्लिकेशन ऑप्टिमाइज़ करने का तरीका

OVERRIDE_MIN_ASPECT_RATIO देखें.

ओवरराइड की सुविधा को बंद करने या इससे ऑप्ट आउट करने का तरीका

OVERRIDE_MIN_ASPECT_RATIO देखें.

प्रॉपर्टी फ़्लैग, ताकि ओवरराइड को अडजस्ट किया जा सके

OVERRIDE_MIN_ASPECT_RATIO देखें.

ओवरराइड की जांच करने के लिए adb कमांड

ओवरराइड लागू करने के लिए:

adb shell am compat enable OVERRIDE_MIN_ASPECT_RATIO_EXCLUDE_PORTRAIT_FULLSCREEN <package>

बदलाव को हटाने के लिए:

adb shell am compat disable OVERRIDE_MIN_ASPECT_RATIO_EXCLUDE_PORTRAIT_FULLSCREEN <package>

ध्यान दें: ये निर्देश, कुछ समय के लिए ही ओवरराइड को लागू करते हैं या हटाते हैं.

OVERRIDE_ANY_ORIENTATION

किसी भी ओरिएंटेशन को बदलने के लिए, ये बदलाव किए जा सकते हैं:

ऐप्लिकेशन, ओवरराइड करने जैसा नतीजा कैसे हासिल कर सकते हैं

activity:screenOrientation मेनिफ़ेस्ट एट्रिब्यूट सेट करें या Activity#setRequestedOrientation() एपीआई का इस्तेमाल करें.

ऐप्लिकेशन ऑप्टिमाइज़ करने का तरीका

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

ओवरराइड की सुविधा को बंद करने या इससे ऑप्ट आउट करने का तरीका

प्रॉपर्टी फ़्लैग PROPERTY_COMPAT_ALLOW_ORIENTATION_OVERRIDE को false पर सेट करें.

प्रॉपर्टी फ़्लैग, ताकि ओवरराइड को अडजस्ट किया जा सके

<property android:name="android.window.PROPERTY_COMPAT_ALLOW_ORIENTATION_OVERRIDE"
  android:value="true|false"/>

ओवरराइड की जांच करने के लिए adb कमांड

ओवरराइड लागू करने के लिए:

adb shell am compat enable OVERRIDE_ANY_ORIENTATION <package>

बदलाव को हटाने के लिए:

adb shell am compat disable OVERRIDE_ANY_ORIENTATION <package>

ध्यान दें: ये निर्देश, कुछ समय के लिए ही ओवरराइड को लागू करते हैं या हटाते हैं.

OVERRIDE_ANY_ORIENTATION_TO_USER

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

ऐप्लिकेशन, ओवरराइड करने जैसा नतीजा कैसे हासिल कर सकते हैं

  • android:screenOrientation मेनिफ़ेस्ट एट्रिब्यूट को सेट न करें या एट्रिब्यूट को "user" पर सेट करें.

  • android:resizeableActivity मेनिफ़ेस्ट एट्रिब्यूट को true पर सेट करें.

  • छोटी स्क्रीन पर, android:resizeableActivity=false की मदद से मल्टी-विंडो मोड को बंद करते हुए, ऐप्लिकेशन का साइज़ बदलने की सुविधा चालू करने के लिए, android.supports_size_changes मेटाडेटा फ़्लैग को true पर सेट करें. minAspectRatio और maxAspectRatio को सेट न करें.

ऐप्लिकेशन ऑप्टिमाइज़ करने का तरीका

अपने ऐप्लिकेशन को सभी ओरिएंटेशन के साथ काम करने के लिए सेट करें. इसके लिए, अपने ऐप्लिकेशन के मेनिफ़ेस्ट में screenOrientation की जानकारी सेट न करें. अपने ऐप्लिकेशन के मेनिफ़ेस्ट में android:resizeableActivity एट्रिब्यूट को true पर सेट करके, ऐप्लिकेशन का साइज़ बदलने, मल्टी-विंडो मोड, और सभी डिसप्ले आसपेक्ट रेशियो (लंबाई-चौड़ाई का अनुपात) की सुविधा चालू करें. अलग-अलग डिसप्ले साइज़ के साथ काम करना लेख पढ़ें.

ओवरराइड की सुविधा को बंद करने या इससे ऑप्ट आउट करने का तरीका

OVERRIDE_ANY_ORIENTATION देखें.

प्रॉपर्टी फ़्लैग, ताकि ओवरराइड को अडजस्ट किया जा सके

OVERRIDE_ANY_ORIENTATION देखें.

ओवरराइड की जांच करने के लिए adb कमांड

ओवरराइड लागू करने के लिए:

adb shell am compat enable OVERRIDE_ANY_ORIENTATION_TO_USER <package>

बदलाव को हटाने के लिए:

adb shell am compat disable OVERRIDE_ANY_ORIENTATION_TO_USER <package>

ध्यान दें: ये निर्देश, कुछ समय के लिए ही ओवरराइड को लागू करते हैं या हटाते हैं.

OVERRIDE_UNDEFINED_ORIENTATION_TO_PORTRAIT

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

ऐप्लिकेशन, ओवरराइड करने जैसा नतीजा कैसे हासिल कर सकते हैं

OVERRIDE_ANY_ORIENTATION देखें.

ऐप्लिकेशन ऑप्टिमाइज़ करने का तरीका

OVERRIDE_ANY_ORIENTATION देखें.

ओवरराइड की सुविधा को बंद करने या इससे ऑप्ट आउट करने का तरीका

OVERRIDE_ANY_ORIENTATION देखें.

प्रॉपर्टी फ़्लैग, ताकि ओवरराइड को अडजस्ट किया जा सके

OVERRIDE_ANY_ORIENTATION देखें.

ओवरराइड की जांच करने के लिए adb कमांड

ओवरराइड लागू करने के लिए:

adb shell am compat enable OVERRIDE_UNDEFINED_ORIENTATION_TO_PORTRAIT <package>

बदलाव को हटाने के लिए:

adb shell am compat disable OVERRIDE_UNDEFINED_ORIENTATION_TO_PORTRAIT <package>

ध्यान दें: ये निर्देश, कुछ समय के लिए ही ओवरराइड को लागू करते हैं या हटाते हैं.

OVERRIDE_UNDEFINED_ORIENTATION_TO_NOSENSOR

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

ऐप्लिकेशन, ओवरराइड करने जैसा नतीजा कैसे हासिल कर सकते हैं

OVERRIDE_ANY_ORIENTATION देखें.

ऐप्लिकेशन ऑप्टिमाइज़ करने का तरीका

OVERRIDE_ANY_ORIENTATION देखें.

ओवरराइड की सुविधा को बंद करने या इससे ऑप्ट आउट करने का तरीका

OVERRIDE_ANY_ORIENTATION देखें.

प्रॉपर्टी फ़्लैग, ताकि ओवरराइड को अडजस्ट किया जा सके

OVERRIDE_ANY_ORIENTATION देखें.

ओवरराइड की जांच करने के लिए adb कमांड

ओवरराइड लागू करने के लिए:

adb shell am compat enable OVERRIDE_UNDEFINED_ORIENTATION_TO_NOSENSOR <package>

बदलाव को हटाने के लिए:

adb shell am compat disable OVERRIDE_UNDEFINED_ORIENTATION_TO_NOSENSOR <package>

ध्यान दें: ये निर्देश, कुछ समय के लिए ही ओवरराइड को लागू करते हैं या हटाते हैं.

OVERRIDE_LANDSCAPE_ORIENTATION_TO_REVERSE_LANDSCAPE

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

ऐप्लिकेशन, ओवरराइड करने जैसा नतीजा कैसे हासिल कर सकते हैं

OVERRIDE_ANY_ORIENTATION देखें.

ऐप्लिकेशन ऑप्टिमाइज़ करने का तरीका

OVERRIDE_ANY_ORIENTATION देखें.

ओवरराइड की सुविधा को बंद करने या इससे ऑप्ट आउट करने का तरीका

OVERRIDE_ANY_ORIENTATION देखें.

प्रॉपर्टी फ़्लैग, ताकि ओवरराइड को अडजस्ट किया जा सके

OVERRIDE_ANY_ORIENTATION देखें.

ओवरराइड की जांच करने के लिए adb कमांड

ओवरराइड लागू करने के लिए:

adb shell am compat enable OVERRIDE_LANDSCAPE_ORIENTATION_TO_REVERSE_LANDSCAPE <package>

बदलाव को हटाने के लिए:

adb shell am compat disable OVERRIDE_LANDSCAPE_ORIENTATION_TO_REVERSE_LANDSCAPE <package>

ध्यान दें: ये कमांड, कुछ समय के लिए ही ओवरराइड को लागू करते हैं या हटाते हैं.

OVERRIDE_ORIENTATION_ONLY_FOR_CAMERA

सीमाएं OVERRIDE_UNDEFINED_ORIENTATION_TO_PORTRAIT, OVERRIDE_UNDEFINED_ORIENTATION_TO_NOSENSOR, और OVERRIDE_LANDSCAPE_ORIENTATION_TO_REVERSE_LANDSCAPE ओवरराइड सिर्फ़ तब लागू होते हैं, जब कैमरा कनेक्शन चालू हो.

ऐप्लिकेशन, ओवरराइड करने जैसा नतीजा कैसे हासिल कर सकते हैं

OVERRIDE_ANY_ORIENTATION देखें.

ऐप्लिकेशन ऑप्टिमाइज़ करने का तरीका

OVERRIDE_ANY_ORIENTATION देखें.

ओवरराइड की सुविधा को बंद करने या इससे ऑप्ट आउट करने का तरीका

OVERRIDE_ANY_ORIENTATION देखें.

प्रॉपर्टी फ़्लैग, ताकि ओवरराइड को अडजस्ट किया जा सके

OVERRIDE_ANY_ORIENTATION देखें.

ओवरराइड की जांच करने के लिए adb कमांड

ओवरराइड लागू करने के लिए:

adb shell am compat enable OVERRIDE_ORIENTATION_ONLY_FOR_CAMERA <package>

बदलाव को हटाने के लिए:

adb shell am compat disable OVERRIDE_ORIENTATION_ONLY_FOR_CAMERA <package>

ध्यान दें: ये निर्देश, कुछ समय के लिए ही ओवरराइड को लागू करते हैं या हटाते हैं.

OVERRIDE_USE_DISPLAY_LANDSCAPE_NATURAL_ORIENTATION

इन शर्तों के पूरा होने पर, डिसप्ले ओरिएंटेशन को लैंडस्केप नैचुरल ओरिएंटेशन तक सीमित करता है:

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

ऐप्लिकेशन, ओवरराइड करने जैसा नतीजा कैसे हासिल कर सकते हैं

लागू नहीं. समस्या को ऐप्लिकेशन लॉजिक में हल किया जाना चाहिए.

ऐप्लिकेशन ऑप्टिमाइज़ करने का तरीका

OVERRIDE_ANY_ORIENTATION देखें.

ओवरराइड की सुविधा को बंद करने या इससे ऑप्ट आउट करने का तरीका

प्रॉपर्टी फ़्लैग PROPERTY_COMPAT_ALLOW_DISPLAY_ORIENTATION_OVERRIDE को false पर सेट करें.

प्रॉपर्टी फ़्लैग, ताकि ओवरराइड को अडजस्ट किया जा सके

<property android:name="android.window.PROPERTY_COMPAT_ALLOW_DISPLAY_ORIENTATION_OVERRIDE"
  android:value="true|false"/>

ओवरराइड की जांच करने के लिए adb कमांड

ओवरराइड लागू करने के लिए:

adb shell am compat enable OVERRIDE_USE_DISPLAY_LANDSCAPE_NATURAL_ORIENTATION <package>

बदलाव को हटाने के लिए:

adb shell am compat disable OVERRIDE_USE_DISPLAY_LANDSCAPE_NATURAL_ORIENTATION <package>

ध्यान दें: ये निर्देश, कुछ समय के लिए ही ओवरराइड को लागू करते हैं या हटाते हैं.

OVERRIDE_ENABLE_COMPAT_IGNORE_REQUESTED_ORIENTATION

यह नीति, ऐप्लिकेशन के ओरिएंटेशन को अपडेट करने की प्रोसेस को स्किप कर देती है. ऐसा तब होता है, जब ऐप्लिकेशन को फिर से लॉन्च किया जा रहा हो या कैमरे के साथ काम करने की सुविधा चालू हो और ऐप्लिकेशन Activity#setRequestedOrientation() को कॉल कर रहा हो.

ऐप्लिकेशन, ओवरराइड करने जैसा नतीजा कैसे हासिल कर सकते हैं

प्रॉपर्टी फ़्लैग PROPERTY_COMPAT_IGNORE_REQUESTED_ORIENTATION को true पर सेट करें.

ऐप्लिकेशन ऑप्टिमाइज़ करने का तरीका

OVERRIDE_ANY_ORIENTATION देखें.

ओवरराइड की सुविधा को बंद करने या इससे ऑप्ट आउट करने का तरीका

प्रॉपर्टी फ़्लैग PROPERTY_COMPAT_IGNORE_REQUESTED_ORIENTATION को false पर सेट करें.

प्रॉपर्टी फ़्लैग, ताकि ओवरराइड को अडजस्ट किया जा सके

<property android:name="android.window.PROPERTY_COMPAT_IGNORE_REQUESTED_ORIENTATION"
  android:value="true|false"/>

ओवरराइड की जांच करने के लिए adb कमांड

ओवरराइड लागू करने के लिए:

adb shell am compat enable OVERRIDE_ENABLE_COMPAT_IGNORE_REQUESTED_ORIENTATION <package>

बदलाव को हटाने के लिए:

adb shell am compat disable OVERRIDE_ENABLE_COMPAT_IGNORE_REQUESTED_ORIENTATION <package>

ध्यान दें: ये निर्देश, कुछ समय के लिए ही ओवरराइड को लागू करते हैं या हटाते हैं.

OVERRIDE_ENABLE_COMPAT_IGNORE_ORIENTATION_REQUEST_WHEN_LOOP_DETECTED

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

ऐप्लिकेशन, ओवरराइड करने जैसा नतीजा कैसे हासिल कर सकते हैं

लागू नहीं. समस्या को ऐप्लिकेशन लॉजिक में हल किया जाना चाहिए.

ऐप्लिकेशन ऑप्टिमाइज़ करने का तरीका

OVERRIDE_ANY_ORIENTATION देखें.

ओवरराइड की सुविधा को बंद करने या इससे ऑप्ट आउट करने का तरीका

प्रॉपर्टी फ़्लैग PROPERTY_COMPAT_ALLOW_IGNORING_ORIENTATION_REQUEST_WHEN_LOOP_DETECTED को false पर सेट करें.

प्रॉपर्टी फ़्लैग, ताकि ओवरराइड को अडजस्ट किया जा सके

<property android:name="android.window.PROPERTY_COMPAT_ALLOW_IGNORING_ORIENTATION_REQUEST_WHEN_LOOP_DETECTED"
  android:value="false"/>

ओवरराइड की जांच करने के लिए adb कमांड

ओवरराइड लागू करने के लिए:

adb shell am compat enable OVERRIDE_ENABLE_COMPAT_IGNORE_ORIENTATION_REQUEST_WHEN_LOOP_DETECTED <package>

बदलाव को हटाने के लिए:

adb shell am compat disable OVERRIDE_ENABLE_COMPAT_IGNORE_ORIENTATION_REQUEST_WHEN_LOOP_DETECTED <package>

ध्यान दें: ये निर्देश, कुछ समय के लिए ही ओवरराइड को लागू करते हैं या हटाते हैं.

OVERRIDE_RESPECT_REQUESTED_ORIENTATION

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

ऐप्लिकेशन, ओवरराइड करने जैसा नतीजा कैसे हासिल कर सकते हैं

लागू नहीं. समस्या को ऐप्लिकेशन लॉजिक में हल किया जाना चाहिए.

ऐप्लिकेशन ऑप्टिमाइज़ करने का तरीका

OVERRIDE_ANY_ORIENTATION देखें.

ओवरराइड की सुविधा को बंद करने या इससे ऑप्ट आउट करने का तरीका

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

प्रॉपर्टी फ़्लैग, ताकि ओवरराइड को अडजस्ट किया जा सके

इस बदलाव के लिए कोई प्रॉपर्टी फ़्लैग नहीं है.

ओवरराइड की जांच करने के लिए adb कमांड

ओवरराइड लागू करने के लिए:

adb shell am compat enable OVERRIDE_RESPECT_REQUESTED_ORIENTATION <package>

बदलाव को हटाने के लिए:

adb shell am compat disable OVERRIDE_RESPECT_REQUESTED_ORIENTATION <package>

ध्यान दें: ये निर्देश, कुछ समय के लिए ही ओवरराइड को लागू करते हैं या हटाते हैं.

NEVER_SANDBOX_DISPLAY_APIS

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

ऐप्लिकेशन, ओवरराइड करने जैसा नतीजा कैसे हासिल कर सकते हैं

ऐप्लिकेशन की गतिविधियों का साइज़ बदलने की सुविधा चालू करने के लिए, android:resizeableActivity मेनिफ़ेस्ट एट्रिब्यूट को true पर सेट करें या android.supports_size_changes मेटाडेटा फ़्लैग को true पर सेट करें.

ऐप्लिकेशन ऑप्टिमाइज़ करने का तरीका

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

ओवरराइड की सुविधा को बंद करने या इससे ऑप्ट आउट करने का तरीका

ऑप्ट-आउट नहीं किया जा सकता. बंद किए जा चुके एपीआई से माइग्रेट करें.

प्रॉपर्टी फ़्लैग, ताकि ओवरराइड को अडजस्ट किया जा सके

इस बदलाव के लिए कोई प्रॉपर्टी फ़्लैग नहीं है.

ओवरराइड की जांच करने के लिए adb कमांड

ओवरराइड लागू करने के लिए:

adb shell am compat enable NEVER_SANDBOX_DISPLAY_APIS <package>

बदलाव को हटाने के लिए:

adb shell am compat disable NEVER_SANDBOX_DISPLAY_APIS <package>

ध्यान दें: ये निर्देश, कुछ समय के लिए ही ओवरराइड को लागू करते हैं या हटाते हैं.

ALWAYS_SANDBOX_DISPLAY_APIS

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

ऐप्लिकेशन, ओवरराइड करने जैसा नतीजा कैसे हासिल कर सकते हैं

गतिविधियों को रीसाइज़ न किए जा सकने वाले के तौर पर सेट करें. इसके लिए, android:resizeableActivity एट्रिब्यूट को false पर सेट करें या android.supports_size_changes मेटाडेटा फ़्लैग को false पर सेट करें.

ऐप्लिकेशन ऑप्टिमाइज़ करने का तरीका

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

ओवरराइड की सुविधा को बंद करने या इससे ऑप्ट आउट करने का तरीका

ऑप्ट-आउट नहीं किया जा सकता. बंद किए जा चुके एपीआई से माइग्रेट करें.

प्रॉपर्टी फ़्लैग, ताकि ओवरराइड को अडजस्ट किया जा सके

इस बदलाव के लिए कोई प्रॉपर्टी फ़्लैग नहीं है.

ओवरराइड की जांच करने के लिए adb कमांड

ओवरराइड लागू करने के लिए:

adb shell am compat enable ALWAYS_SANDBOX_DISPLAY_APIS <package>

बदलाव को हटाने के लिए:

adb shell am compat disable ALWAYS_SANDBOX_DISPLAY_APIS <package>

ध्यान दें: ये निर्देश, कुछ समय के लिए ही ओवरराइड को लागू करते हैं या हटाते हैं.

OVERRIDE_SANDBOX_VIEW_BOUNDS_APIS

यह सेटिंग, पैकेज को गतिविधि की सीमाओं के हिसाब से, इन View एपीआई को सैंडबॉक्स करने के लिए मजबूर करती है:

ऐप्लिकेशन, ओवरराइड करने जैसा नतीजा कैसे हासिल कर सकते हैं

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

ऐप्लिकेशन ऑप्टिमाइज़ करने का तरीका

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

ओवरराइड की सुविधा को बंद करने या इससे ऑप्ट आउट करने का तरीका

प्रॉपर्टी फ़्लैग PROPERTY_COMPAT_ALLOW_SANDBOXING_VIEW_BOUNDS_APIS को false पर सेट करें.

प्रॉपर्टी फ़्लैग, ताकि ओवरराइड को अडजस्ट किया जा सके

<property android:name="android.window.PROPERTY_COMPAT_ALLOW_SANDBOXING_VIEW_BOUNDS_APIS"
  android:value="false"/>

ओवरराइड की जांच करने के लिए adb कमांड

ओवरराइड लागू करने के लिए:

adb shell am compat enable OVERRIDE_SANDBOX_VIEW_BOUNDS_APIS <package>

बदलाव को हटाने के लिए:

adb shell am compat disable OVERRIDE_SANDBOX_VIEW_BOUNDS_APIS <package>

ध्यान दें: ये निर्देश, कुछ समय के लिए ही ओवरराइड को लागू करते हैं या हटाते हैं.

OVERRIDE_CAMERA_COMPAT_DISABLE_FORCE_ROTATION

यह नीति, स्क्रीन को ज़बरदस्ती घुमाने की सुविधा को बंद कर देती है. कुछ ऐप्लिकेशन पर उपयोगकर्ता अनुभव को बेहतर बनाया गया है.

ऐप्लिकेशन, ओवरराइड करने जैसा नतीजा कैसे हासिल कर सकते हैं

प्रॉपर्टी फ़्लैग PROPERTY_CAMERA_COMPAT_ALLOW_FORCE_ROTATION को false पर सेट करें.

ऐप्लिकेशन ऑप्टिमाइज़ करने का तरीका

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

ओवरराइड की सुविधा को बंद करने या इससे ऑप्ट आउट करने का तरीका

प्रॉपर्टी फ़्लैग PROPERTY_CAMERA_COMPAT_ALLOW_FORCE_ROTATION को true पर सेट करें.

प्रॉपर्टी फ़्लैग, ताकि ओवरराइड को अडजस्ट किया जा सके

<property android:name="android.window.PROPERTY_CAMERA_COMPAT_ALLOW_FORCE_ROTATION"
  android:value="true|false"/>

ओवरराइड की जांच करने के लिए adb कमांड

ओवरराइड लागू करने के लिए, जिससे फ़ोर्स रोटेशन की सुविधा हट जाती है:

adb shell am compat enable OVERRIDE_CAMERA_COMPAT_DISABLE_FORCE_ROTATION <package>

ओवरराइड को हटाने के लिए, जिससे स्क्रीन को ज़बरदस्ती घुमाया जा सकता है:

adb shell am compat disable OVERRIDE_CAMERA_COMPAT_DISABLE_FORCE_ROTATION <package>

ध्यान दें: ये निर्देश, कुछ समय के लिए ही ओवरराइड को लागू करते हैं या हटाते हैं.

OVERRIDE_CAMERA_COMPAT_DISABLE_SIMULATE_REQUESTED_ORIENTATION

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

ऐप्लिकेशन, ओवरराइड करने जैसा नतीजा कैसे हासिल कर सकते हैं

प्रॉपर्टी फ़्लैग PROPERTY_CAMERA_COMPAT_ALLOW_SIMULATE_REQUESTED_ORIENTATION को false पर सेट करें.

ऐप्लिकेशन ऑप्टिमाइज़ करने का तरीका

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

ओवरराइड की सुविधा को बंद करने या इससे ऑप्ट आउट करने का तरीका

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

प्रॉपर्टी फ़्लैग, ताकि ओवरराइड को अडजस्ट किया जा सके

<property android:name="android.window.PROPERTY_CAMERA_COMPAT_ALLOW_SIMULATE_REQUESTED_ORIENTATION"
  android:value="true|false"/>

ओवरराइड की जांच करने के लिए adb कमांड

ओवरराइड लागू करने के लिए, जो अनुरोध किए गए ओरिएंटेशन को सिम्युलेट करने की सुविधा को हटा देता है:

adb shell am compat enable OVERRIDE_CAMERA_COMPAT_DISABLE_SIMULATE_REQUESTED_ORIENTATION <package>

ओवरराइड को हटाने के लिए, जिससे अनुरोध किए गए ओरिएंटेशन को सिम्युलेट किया जा सकता है:

adb shell am compat disable OVERRIDE_CAMERA_COMPAT_DISABLE_SIMULATE_REQUESTED_ORIENTATION <package>

ध्यान दें: ये निर्देश, कुछ समय के लिए ही ओवरराइड को लागू करते हैं या हटाते हैं.

OVERRIDE_CAMERA_COMPAT_DISABLE_REFRESH

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

ऐप्लिकेशन, ओवरराइड करने जैसा नतीजा कैसे हासिल कर सकते हैं

प्रॉपर्टी फ़्लैग PROPERTY_CAMERA_COMPAT_ALLOW_REFRESH को false पर सेट करें.

ऐप्लिकेशन ऑप्टिमाइज़ करने का तरीका

OVERRIDE_CAMERA_COMPAT_DISABLE_FORCE_ROTATION देखें.

ओवरराइड की सुविधा को बंद करने या इससे ऑप्ट आउट करने का तरीका

प्रॉपर्टी फ़्लैग PROPERTY_CAMERA_COMPAT_ALLOW_REFRESH को true पर सेट करें.

प्रॉपर्टी फ़्लैग, ताकि ओवरराइड को अडजस्ट किया जा सके

<property android:name="android.window.PROPERTY_CAMERA_COMPAT_ALLOW_REFRESH"
  android:value="true|false"/>

ओवरराइड की जांच करने के लिए adb कमांड

ओवरराइड लागू करने के लिए, जिससे गतिविधि रीफ़्रेश करने की सुविधा हट जाती है:

adb shell am compat enable OVERRIDE_CAMERA_COMPAT_DISABLE_REFRESH <package>

ओवरराइड को हटाने के लिए, जिससे गतिविधि को रीफ़्रेश किया जा सकता है:

adb shell am compat disable OVERRIDE_CAMERA_COMPAT_DISABLE_REFRESH <package>

ध्यान दें: ये निर्देश, कुछ समय के लिए ही ओवरराइड को लागू करते हैं या हटाते हैं.

OVERRIDE_CAMERA_COMPAT_ENABLE_REFRESH_VIA_PAUSE

यह पैकेज पर लागू होने पर, कैमरे के साथ काम करने की सुविधा के लिए रोटेशन को ज़बरदस्ती लागू करने के बाद, onResume() → onStop() → onResume() के बजाय onResume() → onPause() → onResume() साइकल का इस्तेमाल करके, गतिविधि को रीफ़्रेश करता है.

ऐप्लिकेशन, ओवरराइड करने जैसा नतीजा कैसे हासिल कर सकते हैं

प्रॉपर्टी फ़्लैग PROPERTY_CAMERA_COMPAT_ENABLE_REFRESH_VIA_PAUSE को true पर सेट करें.

ऐप्लिकेशन ऑप्टिमाइज़ करने का तरीका

OVERRIDE_CAMERA_COMPAT_DISABLE_FORCE_ROTATION देखें.

ओवरराइड की सुविधा को बंद करने या इससे ऑप्ट आउट करने का तरीका

प्रॉपर्टी फ़्लैग PROPERTY_CAMERA_COMPAT_ENABLE_REFRESH_VIA_PAUSE को false पर सेट करें.

प्रॉपर्टी फ़्लैग, ताकि ओवरराइड को अडजस्ट किया जा सके

<property android:name="android.window.PROPERTY_CAMERA_COMPAT_ENABLE_REFRESH_VIA_PAUSE"
  android:value="true|false"/>

ओवरराइड की जांच करने के लिए adb कमांड

ओवरराइड लागू करने के लिए:

adb shell am compat enable OVERRIDE_CAMERA_COMPAT_ENABLE_REFRESH_VIA_PAUSE <package>

बदलाव को हटाने के लिए:

adb shell am compat disable OVERRIDE_CAMERA_COMPAT_ENABLE_REFRESH_VIA_PAUSE <package>

ध्यान दें: ये निर्देश, कुछ समय के लिए ही ओवरराइड को लागू करते हैं या हटाते हैं.

OVERRIDE_CAMERA_LANDSCAPE_TO_PORTRAIT

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

ऐप्लिकेशन, ओवरराइड करने जैसा नतीजा कैसे हासिल कर सकते हैं

प्रॉपर्टी फ़्लैग PROPERTY_COMPAT_OVERRIDE_LANDSCAPE_TO_PORTRAIT को true पर सेट करें.

ऐप्लिकेशन ऑप्टिमाइज़ करने का तरीका

OVERRIDE_CAMERA_COMPAT_DISABLE_FORCE_ROTATION देखें.

ओवरराइड की सुविधा को बंद करने या इससे ऑप्ट आउट करने का तरीका

प्रॉपर्टी फ़्लैग PROPERTY_COMPAT_OVERRIDE_LANDSCAPE_TO_PORTRAIT को false पर सेट करें.

प्रॉपर्टी फ़्लैग, ताकि ओवरराइड को अडजस्ट किया जा सके

<property android:name="android.camera.PROPERTY_COMPAT_OVERRIDE_LANDSCAPE_TO_PORTRAIT"
  android:value="true|false"/>

ओवरराइड की जांच करने के लिए adb कमांड

ओवरराइड लागू करने के लिए, जो इनर फ़्रंट कैमरे की क्रॉपिंग लागू करता है:

adb shell am compat enable OVERRIDE_CAMERA_LANDSCAPE_TO_PORTRAIT <package>

ओवरराइड को हटाने के लिए, जिससे इनर फ़्रंट कैमरे की क्रॉपिंग हट जाती है:

adb shell am compat disable OVERRIDE_CAMERA_LANDSCAPE_TO_PORTRAIT <package>

ध्यान दें: ये निर्देश, कुछ समय के लिए ही ओवरराइड को लागू करते हैं या हटाते हैं.

OVERRIDE_DISABLE_MEDIA_PROJECTION_SINGLE_APP_OPTION

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

ऐप्लिकेशन, ओवरराइड करने जैसा नतीजा कैसे हासिल कर सकते हैं

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

ऐप्लिकेशन ऑप्टिमाइज़ करने का तरीका

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

अपने ऐप्लिकेशन का साइज़ बदलने की सुविधा (resizeableActivity="true") चालू करें, ताकि वह मल्टी-विंडो मोड के साथ काम कर सके.

ओवरराइड की सुविधा को बंद करने या इससे ऑप्ट आउट करने का तरीका

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

प्रॉपर्टी फ़्लैग, ताकि ओवरराइड को अडजस्ट किया जा सके

कोई नहीं.

ओवरराइड की जांच करने के लिए adb कमांड

ओवरराइड लागू करने के लिए, जो ऐप्लिकेशन के सिर्फ़ एक ऐप्लिकेशन विंडो की स्क्रीन शेयर करने की सुविधा से ऑप्ट आउट करने की सुविधा को रद्द करता है (यानी कि सिर्फ़ एक ऐप्लिकेशन विंडो की स्क्रीन शेयर करने की सुविधा को चालू करता है):

adb shell am compat enable OVERRIDE_DISABLE_MEDIA_PROJECTION_SINGLE_APP_OPTION <package>

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

adb shell am compat disable OVERRIDE_DISABLE_MEDIA_PROJECTION_SINGLE_APP_OPTION <package>

ध्यान दें: ये निर्देश, कुछ समय के लिए ही ओवरराइड को लागू करते हैं या हटाते हैं.

OVERRIDE_ENABLE_COMPAT_FAKE_FOCUS

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

ऐप्लिकेशन, ओवरराइड करने जैसा नतीजा कैसे हासिल कर सकते हैं

प्रॉपर्टी फ़्लैग PROPERTY_COMPAT_ENABLE_FAKE_FOCUS को true पर सेट करें.

ऐप्लिकेशन ऑप्टिमाइज़ करने का तरीका

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

अगर Unity गेम इंजन का इस्तेमाल किया जा रहा है, तो 2019.4.40 या इसके बाद के वर्शन पर अपग्रेड करें और अपने गेम को फिर से एक्सपोर्ट करें. Android Player की सेटिंग में, Resizable Window विकल्प को चुनें.

ओवरराइड की सुविधा को बंद करने या इससे ऑप्ट आउट करने का तरीका

प्रॉपर्टी फ़्लैग PROPERTY_COMPAT_ENABLE_FAKE_FOCUS को false पर सेट करें.

प्रॉपर्टी फ़्लैग, ताकि ओवरराइड को अडजस्ट किया जा सके

<property android:name="android.window.PROPERTY_COMPAT_ENABLE_FAKE_FOCUS"
  android:value="true|false"/>

ओवरराइड की जांच करने के लिए adb कमांड

ओवरराइड लागू करने के लिए:

adb shell am compat enable OVERRIDE_ENABLE_COMPAT_FAKE_FOCUS <package>

बदलाव को हटाने के लिए:

adb shell am compat disable OVERRIDE_ENABLE_COMPAT_FAKE_FOCUS <package>

ध्यान दें: ये कमांड, कुछ समय के लिए ही ओवरराइड को लागू करते हैं या हटाते हैं.

OVERRIDE_EXCLUDE_CAPTION_INSETS_FROM_APP_BOUNDS

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

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

  • एज-टू-एज या इमर्सिव ऐप्लिकेशन, जो कैप्शन बार के इनसेट को मैनेज नहीं करते: ऐप्लिकेशन का लेआउट एरिया पूरी विंडो में फैला होता है. इसलिए, अगर ऐप्लिकेशन अपने यूज़र इंटरफ़ेस (यूआई) को ऑफ़सेट करने के लिए WindowInsets से क्वेरी नहीं करता है, तो सबसे ऊपर मौजूद कंट्रोल, सीधे कैप्शन बार के नीचे दिख सकते हैं.
  • ऐसे ऐप्लिकेशन जिनमें सिस्टम, कैप्शन बार के इनसेट को ज़बरदस्ती इस्तेमाल करता है: ऐप्लिकेशन को कैप्शन बार के पीछे ड्रॉ होने से रोकने के लिए, सिस्टम ऐप्लिकेशन के रूट व्यू को कैप्शन बार के नीचे शिफ़्ट कर देता है. अगर ऐप्लिकेशन अपने व्यूपोर्ट डाइमेंशन के बजाय, अडजस्ट नहीं किए गए Configuration.screenHeightDp या ऐप्लिकेशन के बाउंड का इस्तेमाल करके अपने लेआउट का साइज़ तय करता है, तो वह कैप्शन बार के नीचे से शुरू होने वाला फ़ुल-विंडो-हाइट लेआउट रेंडर करता है. इससे, यूज़र इंटरफ़ेस (यूआई) के निचले एलिमेंट, विंडो के निचले किनारे से आगे चले जाते हैं और टच टारगेट गलत तरीके से अलाइन हो जाते हैं.

ओवरराइड की सुविधा चालू होने पर, सिस्टम ऐप्लिकेशन की सीमाओं और Configuration.screenHeightDp से कैप्शन बार की ऊंचाई को घटा देता है. इससे ऐप्लिकेशन का लेआउट एरिया, कैप्शन बार के नीचे मौजूद स्पेस के साथ अलाइन हो जाता है.

ऐप्लिकेशन, ओवरराइड करने जैसा नतीजा कैसे हासिल कर सकते हैं

एज-टू-एज डिसप्ले की सेटिंग चालू करें. नीचे दी गई जानकारी देखें:

ऐप्लिकेशन ऑप्टिमाइज़ करने का तरीका

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

ओवरराइड की सुविधा को बंद करने या इससे ऑप्ट आउट करने का तरीका

प्रॉपर्टी फ़्लैग PROPERTY_COMPAT_ALLOW_EXCLUDE_CAPTION_INSETS को false पर सेट करें.

प्रॉपर्टी फ़्लैग, ताकि ओवरराइड को अडजस्ट किया जा सके

<property android:name="android.window.PROPERTY_COMPAT_ALLOW_EXCLUDE_CAPTION_INSETS"
  android:value="true|false"/>

ओवरराइड की जांच करने के लिए adb कमांड

ओवरराइड लागू करने के लिए:

adb shell am compat enable OVERRIDE_EXCLUDE_CAPTION_INSETS_FROM_APP_BOUNDS <package>

बदलाव को हटाने के लिए:

adb shell am compat disable OVERRIDE_EXCLUDE_CAPTION_INSETS_FROM_APP_BOUNDS <package>

ध्यान दें: ये निर्देश, कुछ समय के लिए ही ओवरराइड को लागू करते हैं या हटाते हैं.

अन्य संसाधन


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