Android, उन ऐप्लिकेशन के लिए कंपैटिबिलिटी मोड चालू करता है जो ओरिएंटेशन या फिर रीसेट करने से जुड़ी पाबंदियों के बारे में बताते हैं. काम करने के तरीके के हिसाब से डिवाइस के हिसाब से बदलने वाले मोड की मदद से, यह पक्का किया जाता है कि बड़े डिसप्ले वाले डिवाइसों और फ़ोल्ड किए जा सकने वाले फ़्लिप फ़ोन पर ऐप्लिकेशन सही तरीके से काम करे. हालांकि, इस मोड में ऐप्लिकेशन का इस्तेमाल करना ज़्यादा आसान नहीं होता.
हर ऐप्लिकेशन के लिए बदलाव की सुविधा की मदद से, डिवाइस बनाने वाली कंपनियां ऐप्लिकेशन के व्यवहार में बदलाव कर सकती हैं. इससे, उपयोगकर्ता अनुभव को बेहतर बनाया जा सकता है या ऐप्लिकेशन को कुछ खास डिवाइसों पर काम करने से रोका जा सकता है.
रेफ़रंस डिवाइस
इन डिवाइसों पर, ऐप्लिकेशन के हिसाब से बदलाव करने की ज़रूरत पड़ सकती है. ऐसा, असामान्य कॉन्फ़िगरेशन या ऐसे कॉन्फ़िगरेशन की वजह से होता है जो ऐप्लिकेशन के साथ ठीक से काम नहीं करते:
- टैबलेट: 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 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 ने कई विंडो मोड और फ़ोल्ड किए जा सकने वाले डिवाइसों जैसी सुविधाओं के लिए सहायता जोड़ी है. इसलिए, लेगसी एपीआई को बंद कर दिया गया है और उन्हें अप-टू-डेट एपीआई से बदल दिया गया है. ये एपीआई, सभी डिसप्ले साइज़ और डिवाइस फ़ॉर्म फ़ैक्टर के लिए काम करते हैं. हालांकि, पुराने वर्शन के साथ काम करने की सुविधा के लिए, अब भी पुराने API उपलब्ध हैं.
कुछ View
एपीआई को खास मकसदों के लिए डिज़ाइन किया गया है. डेवलपर को इनके बारे में हमेशा पूरी जानकारी नहीं होती.
समस्या
डेवलपर, अब काम न करने वाले Display
एपीआई का इस्तेमाल करना जारी रखते हैं. साथ ही, यह गलत तरीके से मान लेते हैं कि एपीआई, डिवाइस के डिसप्ले एरिया के बजाय ऐप्लिकेशन के बाउंड दिखाते हैं. इसके अलावा, हो सकता है कि डेवलपर सामान्य डिसप्ले मेट्रिक पाने के लिए, गलती से खास मकसद के लिए बने व्यू एपीआई का इस्तेमाल करें.
इस वजह से, ऐप्लिकेशन विंडो के साइज़ में बदलाव करने के बाद, यूज़र इंटरफ़ेस (यूआई) एलिमेंट को फिर से पोज़िशन करते समय गलत हिसाब लगाया जाता है. इससे लेआउट से जुड़ी समस्याएं आती हैं.
ऐसे Display API जिन पर पाबंदी लगी हुई है और जिनका आम तौर पर गलत इस्तेमाल किया जाता है:
ज़्यादा जानकारी के लिए, मल्टी-विंडो मोड की सुविधा लेख पढ़ें.
View API का गलत इस्तेमाल:
ऑप्टिमाइज़ेशन
यूज़र इंटरफ़ेस (यूआई) एलिमेंट की पोज़िशन तय करने के लिए, डिसप्ले के फ़िज़िकल साइज़ पर कभी भरोसा न करें. अपने ऐप्लिकेशन को WindowMetrics
पर आधारित एपीआई पर माइग्रेट करें. इनमें ये WindowManager
एपीआई भी शामिल हैं:
प्लेटफ़ॉर्म:
Jetpack:
कंपैटिबिलिटी से जुड़ी समस्या हल करने का तरीका
ऐप्लिकेशन के बाउंड दिखाने के लिए, दो बदलावों की मदद से, अब काम न करने वाले 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 गेम फ़ोकस खो देते हैं और कॉन्टेंट दिखाना बंद कर देते हैं.
समस्या
Android पर मल्टी-विंडो मोड के साथ काम करने के लिए, Unity ने Unity 2019.4 में Resizable Window
विकल्प जोड़ा है. हालांकि, शुरुआती लागू करने की प्रोसेस में, मल्टी-विंडो मोड में गतिविधि के लाइफ़साइकल पर सही तरीके से प्रतिक्रिया नहीं हुई. इस वजह से, ऐप्लिकेशन के फ़ोकस हटने पर UnityPlayer, वीडियो चलाना रोक देता है. प्लेयर ने स्क्रीन को काला कर दिया या गेम का आखिरी फ़्रेम फ़्रीज़ कर दिया. गेमप्ले सिर्फ़ तब फिर से शुरू हुआ, जब उपयोगकर्ता ने स्क्रीन पर टैप किया. Unity इंजन का इस्तेमाल करने वाले कई ऐप्लिकेशन में यह समस्या आती है. साथ ही, ये ऐप्लिकेशन मल्टी-विंडो मोड में ब्लैक विंडो के तौर पर रेंडर होते हैं.
ऑप्टिमाइज़ेशन
Unity को 2019.4.40 या इसके बाद के वर्शन में अपग्रेड करें और अपने गेम को फिर से एक्सपोर्ट करें. Android प्लेयर की सेटिंग में, Resizable Window
विकल्प पर सही का निशान लगाकर रखें. ऐसा न करने पर, फ़ोकस में न होने पर गेम रुक जाता है. भले ही, गेम मल्टी-विंडो मोड में पूरी तरह से दिख रहा हो.
कंपैटिबिलिटी से जुड़ी समस्या हल करने का तरीका
डिवाइस बनाने वाली कंपनियां, हर ऐप्लिकेशन के लिए OVERRIDE_ENABLE_COMPAT_FAKE_FOCUS
को लागू कर सकती हैं. इससे, मल्टी-विंडो मोड में किसी ऐप्लिकेशन को फ़र्ज़ी फ़ोकस इवेंट दिया जा सकता है. बदलाव करने पर, गतिविधि में कॉन्टेंट फिर से दिखने लगता है और उसे ब्लैक आउट नहीं किया जाता.
अपने ऐप्लिकेशन के साथ काम करने से जुड़ी समस्याओं का पता लगाना
अपने ऐप्लिकेशन की जांच करने और यह समझने के लिए कि यह अलग-अलग फ़ॉर्म फ़ैक्टर पर कैसे काम करता है, यहां दिए गए रिसॉर्स का इस्तेमाल करें:
- डिवाइस स्ट्रीमिंग: Google के डेटा सेंटर में होस्ट किए गए प्रोडक्शन डिवाइसों (इनमें रेफ़रंस डिवाइस भी शामिल हैं) पर अपने ऐप्लिकेशन की जांच करने के लिए, Firebase की मदद से काम करने वाली Android डिवाइस स्ट्रीमिंग देखें
- Android Studio Hedgehog में एमुलेटर: रेफ़रंस डिवाइसों के लिए एमुलेटर बनाने के बारे में जानने के लिए, वर्चुअल डिवाइस बनाना और मैनेज करना लेख पढ़ें
- Android Studio का साइज़ बदलने वाला एमुलेटर: वर्चुअल डिवाइसों को ऐक्सेस करने के बारे में जानने के लिए, Android एमुलेटर पर ऐप्लिकेशन चलाना लेख पढ़ें
लेटरबॉक्स किया गया है
पुष्टि करें कि हर गतिविधि, ऐप्लिकेशन के लिए उपलब्ध डिसप्ले स्पेस का इस्तेमाल कर सकती है. सबसे पहले, अपने टेस्ट फ़ोल्डर में यह कोड डालें:
Kotlin
fun Activity.isLetterboxed() : 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(Activity 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 { assertThat(it.isLetterboxed()).isFalse() } }
Java
@Rule public ActivityScenarioRule<MainActivity> rule = new ActivityScenarioRule<>(MainActivity.class); public void activity_launched_notLetterBoxed() { try (ActivityScenario<MainActivity> scenario = ActivityScenario.launch(MainActivity.class)) { scenario.onActivity(activity -> { assertThat(isLetterboxed(activity)).isFalse(); }); } }
आम तौर पर, इस तरह का टेस्ट तब तक चलाएं, जब तक यह पास न हो जाए और यह पुष्टि न हो जाए कि आपके ऐप्लिकेशन की गतिविधियां, ऐप्लिकेशन के लिए उपलब्ध पूरे डिसप्ले स्पेस को ले लेती हैं. अपने ऐप्लिकेशन को सभी तरह के डिवाइसों पर टेस्ट करें, ताकि यह पक्का किया जा सके कि ऐप्लिकेशन एक जैसा काम कर रहा है.
हर ऐप्लिकेशन के लिए अलग-अलग समयसीमा तय करना
Android, बदलाव करने की सुविधा देता है. इससे, ऐप्लिकेशन के कॉन्फ़िगर किए गए व्यवहार में बदलाव होता है. उदाहरण के लिए, FORCE_RESIZE_APP
ओवरराइड, सिस्टम को साइज़ कंपैटबिलिटी मोड को बायपास करने का निर्देश देता है. साथ ही, ऐप्लिकेशन के मेनिफ़ेस्ट में resizeableActivity="false"
की जानकारी दी गई होने पर भी, ऐप्लिकेशन को डिसप्ले डाइमेंशन के हिसाब से साइज़ में बदल देता है.
डिवाइस बनाने वाली कंपनियां, चुनिंदा ऐप्लिकेशन या सभी ऐप्लिकेशन के लिए, बड़ी स्क्रीन वाले खास डिवाइसों पर बदलाव लागू करती हैं. Android 14 (एपीआई लेवल 34) और इसके बाद के वर्शन पर, उपयोगकर्ता डिवाइस की सेटिंग की मदद से ऐप्लिकेशन में बदलाव कर सकते हैं.
हर ऐप्लिकेशन के लिए उपयोगकर्ता की ओर से बदलाव करना
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
पर सेट करने से कोई असर नहीं पड़ता.
अपने ऐप्लिकेशन को सभी स्क्रीन के लिए ऑप्टिमाइज़ करें: अपने ऐप्लिकेशन में आसपेक्ट रेशियो की पाबंदियां न सेट करें. उपलब्ध डिसप्ले स्पेस के आधार पर अलग-अलग लेआउट के साथ काम करने के लिए, विंडो साइज़ क्लास का इस्तेमाल करें.
डिवाइस बनाने वाली कंपनी के लिए, हर ऐप्लिकेशन के हिसाब से बदलाव
डिवाइस मैन्युफ़ैक्चरर, चुनिंदा डिवाइसों पर हर ऐप्लिकेशन के हिसाब से बदलाव लागू करते हैं. रेफ़रंस डिवाइस, डिफ़ॉल्ट रूप से कई ऐप्लिकेशन पर कुछ बदलाव लागू कर सकते हैं.
ऐप्लिकेशन, ज़्यादातर बदलावों से ऑप्ट आउट कर सकते हैं. इसके बारे में जानने के लिए, यहां दी गई हर ऐप्लिकेशन के लिए बदलाव टेबल देखें.
आपके पास, अपने ऐप्लिकेशन को बदलावों के साथ चालू या बंद करके टेस्ट करने का विकल्प है. इसके लिए, आपको कम्पैटिबिलिटी फ़्रेमवर्क का इस्तेमाल करना होगा. कम्पैटिबिलिटी फ़्रेमवर्क टूल देखें. चालू होने पर, बदलाव पूरे ऐप्लिकेशन पर लागू होते हैं.
Android डीबग ब्रिज (adb) का इस्तेमाल करके भी, बदलावों को चालू या बंद किया जा सकता है. साथ ही, यह भी तय किया जा सकता है कि आपके ऐप्लिकेशन पर कौनसे बदलाव लागू हों.
बदलावों को इस तरह से चालू या बंद करें:
adb shell am compat enable/disable <override name/id> <package>
रेफ़रंस डिवाइसों के लिए, देखें कि आपके ऐप्लिकेशन पर कौनसे बदलाव लागू होते हैं:
adb shell dumpsys platform_compat | grep <package name>
यहां दी गई टेबल में, उपलब्ध बदलावों के साथ-साथ, अपने ऐप्लिकेशन को ऑप्टिमाइज़ करने का तरीका बताया गया है, ताकि ऐप्लिकेशन को बदलावों पर निर्भर न रहना पड़े. कुछ बदलावों से ऑप्ट आउट करने के लिए, अपने ऐप्लिकेशन मेनिफ़ेस्ट में प्रॉपर्टी फ़्लैग जोड़े जा सकते हैं.
हर ऐप्लिकेशन के लिए अलग-अलग समयसीमा तय करना | |||
---|---|---|---|
टाइप | नाम | आईडी | ब्यौरा |
साइज़ बदलने की सुविधा | FORCE_RESIZE_APP | 174042936 | कॉन्फ़िगरेशन में बदलाव होने पर, ऐप्लिकेशन के लिए साइज़ के हिसाब से काम करने की सुविधा को बायपास करता है. |
FORCE_NON_RESIZE_APP | 181136395 | कॉन्फ़िगरेशन में बदलाव होने पर, ऐप्लिकेशन को साइज़ कंपैटबिलिटी मोड में चलाने के लिए मजबूर करता है. | |
आसपेक्ट रेशियो | OVERRIDE_MIN_ASPECT_RATIO | 174042980 | गेटकीपर का बदलाव, जिसे आसपेक्ट रेशियो (लंबाई-चौड़ाई का अनुपात) के किसी भी अन्य बदलाव को लागू करने के लिए चालू करना ज़रूरी है. |
OVERRIDE_MIN_ASPECT_RATIO_PORTRAIT_ONLY | 203647190 | अगर यह सेटिंग चालू है (डिफ़ॉल्ट रूप से), तो यह सिर्फ़ पोर्ट्रेट मोड में की जाने वाली गतिविधियों के लिए ही लागू होती है. | |
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 एपीआई, ऐप्लिकेशन के बाउंड दिखाते हैं. इससे यूज़र इंटरफ़ेस (यूआई) से जुड़ी समस्याएं आती हैं. |
|
Camera compat | OVERRIDE_CAMERA_COMPAT_DISABLE_FORCE_ROTATION | 263959004 | फ़ोर्स रोटेशन की सुविधा बंद करता है. डिफ़ॉल्ट रूप से, कैमरे की झलक देखने के लिए इस्तेमाल होने वाले सभी ऐप्लिकेशन, कैमरे के ओरिएंटेशन के हिसाब से फ़ोर्स रोटेट हो जाते हैं. |
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 ऐप्लिकेशन को फ़र्ज़ी फ़ोकस इवेंट भेज सकता है. इससे ऐप्लिकेशन को फिर से कॉन्टेंट दिखाने का सिग्नल मिलता है. |
FORCE_RESIZE_APP
जिन पैकेज पर बदलाव लागू किया गया है उनके साइज़ में बदलाव करने की सुविधा चालू करता है. इससे, ऐप्लिकेशन को मल्टी-विंडो मोड में डाले जाने की सुविधा में कोई बदलाव नहीं होता. हालांकि, स्क्रीन का साइज़ बदलने पर, ऐप्लिकेशन को साइज़ कंपैटबिलिटी मोड में डाले बिना उसका साइज़ बदला जा सकता है.
ऐप्लिकेशन, ओवरराइड करने की सुविधा के ज़रिए मिलने वाले नतीजे को कैसे पा सकते हैं
ऐप्लिकेशन मेनिफ़ेस्ट में, android:resizeableActivity
एट्रिब्यूट को true
पर सेट करें. इसके अलावा, android:resizeableActivity=false
की मदद से मल्टी-विंडो मोड को बंद करते समय, साइज़ बदलने की सुविधा चालू करने के लिए, android.supports_size_changes
मेटाडेटा फ़्लैग को 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
सेट करें.
ऐप्लिकेशन को ऑप्टिमाइज़ करने का तरीका
अपने ऐप्लिकेशन में आसपेक्ट रेशियो की पाबंदियां न सेट करें. पक्का करें कि आपका ऐप्लिकेशन अलग-अलग डिसप्ले साइज़ के साथ काम करता हो. स्क्रीन पर आपके ऐप्लिकेशन के पास मौजूद जगह के आधार पर, अलग-अलग लेआउट के साथ काम करने के लिए, विंडो साइज़ क्लास का इस्तेमाल करें. WindowSizeClass
एपीआई लिखें और WindowSizeClass
एपीआई देखें लेख पढ़ें.
बदलाव को बदलने की सुविधा को बंद करने या उससे ऑप्ट आउट करने का तरीका
आसपेक्ट रेशियो की पाबंदी तय करें या प्रॉपर्टी फ़्लैग 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_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
किसी भी ओरिएंटेशन को बदलने के लिए, ये बदलाव करने की सुविधा चालू करता है:
- OVERRIDE_UNDEFINED_ORIENTATION_TO_PORTRAIT
- OVERRIDE_UNDEFINED_ORIENTATION_TO_NOSENSOR
- OVERRIDE_LANDSCAPE_ORIENTATION_TO_REVERSE_LANDSCAPE
ऐप्लिकेशन, ओवरराइड करने की सुविधा के बराबर नतीजे कैसे पा सकते हैं
activity:screenOrientation
मेनिफ़ेस्ट एट्रिब्यूट को सेट करें या Activity#setRequestedOrientation()
एपीआई का इस्तेमाल करें.
ऐप्लिकेशन को ऑप्टिमाइज़ करने का तरीका
आपका ऐप्लिकेशन सभी ओरिएंटेशन के साथ काम करना चाहिए. ओरिएंटेशन में बदलाव करना, कॉन्फ़िगरेशन में बदलाव करना होता है. इसे दो तरीकों से मैनेज किया जा सकता है: सिस्टम को ऐप्लिकेशन को मिटाने और फिर से बनाने की अनुमति देना या कॉन्फ़िगरेशन में बदलावों को खुद मैनेज करना. अगर कॉन्फ़िगरेशन में होने वाले बदलावों को खुद मैनेज किया जाता है, तो ViewModel
का इस्तेमाल करके ऐप्लिकेशन की स्थिति को बनाए रखा जा सकता है. कुछ ही मामलों में, सिर्फ़ छोटे डिसप्ले पर ओरिएंटेशन को लॉक किया जा सकता है. हालांकि, ऐसा करने पर ऐप्लिकेशन को ज़रूरत के हिसाब से घुमाने की सुविधा के मुकाबले, स्क्रीन का साइज़ उतना अच्छा नहीं दिखता. Android 12L और इसके बाद के वर्शन पर, डिवाइस कॉन्फ़िगरेशन की मदद से, डिवाइस के ऑरिएंटेशन को बदला जा सकता है. कॉन्फ़िगरेशन में हुए बदलावों को हैंडल करने और सभी ओरिएंटेशन के साथ काम करने के बारे में ज़्यादा जानने के लिए, कॉन्फ़िगरेशन में हुए बदलावों को हैंडल करना, ViewModel की खास जानकारी, और ऐप्लिकेशन के ओरिएंटेशन पर फ़ोन पर पाबंदी है, लेकिन बड़ी स्क्रीन वाले डिवाइसों पर नहीं लेख पढ़ें.
बदलाव को बदलने की सुविधा को बंद करने या उससे ऑप्ट आउट करने का तरीका
प्रॉपर्टी के फ़्लैग को false
पर सेट करें.PROPERTY_COMPAT_ALLOW_ORIENTATION_OVERRIDE
बदलाव को अडजस्ट करने के लिए प्रॉपर्टी फ़्लैग
<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()
पर किए गए सभी कॉल को अनदेखा कर देता है.
ऐप्लिकेशन, ओवरराइड करने की सुविधा के बराबर नतीजे कैसे पा सकते हैं
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
पैकेज में मौजूद सभी गतिविधियों के लिए, रिवर्सलैंडस्केप ओरिएंटेशन चालू करता है. जब तक 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
देखें.
बदलाव को बदलने की सुविधा को बंद करने या उससे ऑप्ट आउट करने का तरीका
प्रॉपर्टी के फ़्लैग को false
पर सेट करें.PROPERTY_COMPAT_ALLOW_DISPLAY_ORIENTATION_OVERRIDE
बदलाव को अडजस्ट करने के लिए प्रॉपर्टी फ़्लैग
<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()
को कॉल करता है.
ऐप्लिकेशन, ओवरराइड करने की सुविधा के बराबर नतीजे कैसे पा सकते हैं
प्रॉपर्टी के फ़्लैग को true
पर सेट करें.PROPERTY_COMPAT_IGNORE_REQUESTED_ORIENTATION
ऐप्लिकेशन को ऑप्टिमाइज़ करने का तरीका
OVERRIDE_ANY_ORIENTATION
देखें.
बदलाव को बदलने की सुविधा को बंद करने या उससे ऑप्ट आउट करने का तरीका
प्रॉपर्टी के फ़्लैग को false
पर सेट करें.PROPERTY_COMPAT_IGNORE_REQUESTED_ORIENTATION
बदलाव को अडजस्ट करने के लिए प्रॉपर्टी फ़्लैग
<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
API, डिसप्ले एरिया की सीमाएं दिखाना जारी रखते हैं.
ऐप्लिकेशन, ओवरराइड करने की सुविधा के बराबर नतीजे कैसे पा सकते हैं
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
देखें.
बदलाव को बदलने की सुविधा को बंद करने या उससे ऑप्ट आउट करने का तरीका
प्रॉपर्टी के फ़्लैग को false
पर सेट करें.PROPERTY_COMPAT_ALLOW_SANDBOXING_VIEW_BOUNDS_APIS
बदलाव को अडजस्ट करने के लिए प्रॉपर्टी फ़्लैग
<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
डिवाइस के स्क्रीन की दिशा अपने-आप बदलने की सुविधा बंद कर देता है. कुछ ऐप्लिकेशन पर उपयोगकर्ता अनुभव को बेहतर बनाता है.
ऐप्लिकेशन, ओवरराइड करने की सुविधा के बराबर नतीजे कैसे पा सकते हैं
प्रॉपर्टी के फ़्लैग को false
पर सेट करें.PROPERTY_CAMERA_COMPAT_ALLOW_FORCE_ROTATION
ऐप्लिकेशन को ऑप्टिमाइज़ करने का तरीका
कैमरा सेंसर के ओरिएंटेशन या डिवाइस की जानकारी को कैश मेमोरी में सेव करके इस्तेमाल न करें. कैमरे के साथ काम करने के बारे में जानकारी पाने के लिए, कैमरा व्यूफ़ाइंडर की सुविधा और अपने कैमरा ऐप्लिकेशन में, साइज़ बदलने की सुविधा लेख पढ़ें.
बदलाव को बदलने की सुविधा को बंद करने या उससे ऑप्ट आउट करने का तरीका
प्रॉपर्टी के फ़्लैग को true
पर सेट करें.PROPERTY_CAMERA_COMPAT_ALLOW_FORCE_ROTATION
बदलाव को अडजस्ट करने के लिए प्रॉपर्टी फ़्लैग
<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_REFRESH
फ़ोर्स रोटेशन के बाद, गतिविधि रीफ़्रेश करने की सुविधा बंद कर देता है. जब रीफ़्रेश करने से ऐप्लिकेशन में मौजूद स्टेटस मिट जाता है, तो उपयोगकर्ता अनुभव को बेहतर बनाता है.
ऐप्लिकेशन, ओवरराइड करने की सुविधा के बराबर नतीजे कैसे पा सकते हैं
प्रॉपर्टी के फ़्लैग को false
पर सेट करें.PROPERTY_CAMERA_COMPAT_ALLOW_REFRESH
ऐप्लिकेशन को ऑप्टिमाइज़ करने का तरीका
OVERRIDE_CAMERA_COMPAT_DISABLE_FORCE_ROTATION देखें.
बदलाव को बदलने की सुविधा को बंद करने या उससे ऑप्ट आउट करने का तरीका
प्रॉपर्टी के फ़्लैग को true
पर सेट करें.PROPERTY_CAMERA_COMPAT_ALLOW_REFRESH
बदलाव को अडजस्ट करने के लिए प्रॉपर्टी फ़्लैग
<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()
→ onPause()
→ onResume()
साइकल का इस्तेमाल करने के बजाय, onResume()
→
onStop()
→ onResume()
साइकल का इस्तेमाल करना पड़ता है.
ऐप्लिकेशन, ओवरराइड करने की सुविधा के बराबर नतीजे कैसे पा सकते हैं
प्रॉपर्टी के फ़्लैग को true
पर सेट करें.PROPERTY_CAMERA_COMPAT_ENABLE_REFRESH_VIA_PAUSE
ऐप्लिकेशन को ऑप्टिमाइज़ करने का तरीका
OVERRIDE_CAMERA_COMPAT_DISABLE_FORCE_ROTATION देखें.
बदलाव को बदलने की सुविधा को बंद करने या उससे ऑप्ट आउट करने का तरीका
प्रॉपर्टी के फ़्लैग को false
पर सेट करें.PROPERTY_CAMERA_COMPAT_ENABLE_REFRESH_VIA_PAUSE
बदलाव को अडजस्ट करने के लिए प्रॉपर्टी फ़्लैग
<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
जब पोर्ट्रेट कैमरे का ओरिएंटेशन, डिवाइस के नैचुरल ओरिएंटेशन से मेल नहीं खाता, तो कैमरे के आउटपुट को दूसरे ओरिएंटेशन में काटने के लिए मजबूर करता है. कई ऐप्लिकेशन इस स्थिति को मैनेज नहीं करते और इमेज को स्ट्रेच करके दिखाते हैं.
ऐप्लिकेशन, ओवरराइड करने की सुविधा के बराबर नतीजे कैसे पा सकते हैं
प्रॉपर्टी के फ़्लैग को true
पर सेट करें.PROPERTY_COMPAT_OVERRIDE_LANDSCAPE_TO_PORTRAIT
ऐप्लिकेशन को ऑप्टिमाइज़ करने का तरीका
OVERRIDE_CAMERA_COMPAT_DISABLE_FORCE_ROTATION देखें.
बदलाव को बदलने की सुविधा को बंद करने या उससे ऑप्ट आउट करने का तरीका
प्रॉपर्टी के फ़्लैग को false
पर सेट करें.PROPERTY_COMPAT_OVERRIDE_LANDSCAPE_TO_PORTRAIT
बदलाव को अडजस्ट करने के लिए प्रॉपर्टी फ़्लैग
<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()
के साथ लागू किया गया है. इसकी मदद से, उपयोगकर्ता यह तय कर सकते हैं कि उन्हें फ़ुल स्क्रीन या किसी ऐप्लिकेशन की विंडो शेयर करनी है या नहीं. इसके अलावा, createConfigForUserChoice()
को कॉल करने पर मिले MediaProjectionConfig
आर्ग्युमेंट के साथ, createScreenCaptureIntent(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>
ध्यान दें: ये निर्देश, बदलाव को सिर्फ़ कुछ समय के लिए लागू या हटाते हैं.
अन्य संसाधन
- बड़ी स्क्रीन के लिए ऐप्लिकेशन की क्वालिटी से जुड़े दिशा-निर्देश
- ऐप्लिकेशन की मुख्य क्वालिटी के लिए दिशा-निर्देश