विंडो इनसेट के बारे में जानकारी

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

WindowInsets सिस्टम यूआई के बारे में जानकारी देता है, ताकि यह पक्का किया जा सके कि आपका ऐप्लिकेशन सही जगह पर दिखे और आपका यूआई, सिस्टम यूआई की वजह से न दिखे.

सिस्टम बार के पीछे ड्रॉ करने के लिए, किनारे से किनारे तक जाना
पहला डायग्राम. सिस्टम बार के पीछे दिखाने के लिए, एज-टू-एज जाना.

Android 14 (एपीआई लेवल 34) और इससे पुराने वर्शन पर, आपके ऐप्लिकेशन का यूआई डिफ़ॉल्ट रूप से सिस्टम बार और डिसप्ले कटआउट के नीचे नहीं दिखता.

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

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

इनसेट से जुड़ी बुनियादी बातें

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

सिस्टम यूआई के साइज़ और उसकी जगह की जानकारी, इनसेट के ज़रिए दी जाती है.

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

Android में इनसेट के ये टाइप, WindowInsets के ज़रिए उपलब्ध हैं:

WindowInsets.statusBars

स्टेटस बार की जानकारी देने वाले इनसेट. ये, सिस्टम यूआई के सबसे ऊपर मौजूद बार होते हैं. इनमें सूचना के आइकॉन और अन्य इंडिकेटर शामिल होते हैं.

WindowInsets.statusBarsIgnoringVisibility

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

WindowInsets.navigationBars

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

WindowInsets.navigationBarsIgnoringVisibility

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

WindowInsets.captionBar

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

WindowInsets.captionBarIgnoringVisibility

कैप्शन बार दिखने पर, उसके इनसेट. अगर कैप्शन बार फ़िलहाल छिपे हुए हैं, तो मुख्य कैप्शन बार इनसेट खाली होंगे. हालांकि, ये इनसेट खाली नहीं होंगे.

WindowInsets.systemBars

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

WindowInsets.systemBarsIgnoringVisibility

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

WindowInsets.ime

सॉफ़्टवेयर कीबोर्ड के सबसे नीचे मौजूद जगह की जानकारी देने वाले इनसेट.

WindowInsets.imeAnimationSource

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

WindowInsets.imeAnimationTarget

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

WindowInsets.tappableElement

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

WindowInsets.tappableElementIgnoringVisibility

टैप किए जा सकने वाले एलिमेंट दिखने पर, उसके इनसेट. अगर टैप किए जा सकने वाले एलिमेंट फ़िलहाल छिपे हुए हैं (इमर्सिव फ़ुल स्क्रीन मोड में होने की वजह से), तो मुख्य टैप किए जा सकने वाले एलिमेंट इनसेट खाली होंगे. हालांकि, ये इनसेट खाली नहीं होंगे.

WindowInsets.systemGestures

इनसेट की जानकारी देने वाले इनसेट. इनमें, सिस्टम नेविगेशन के लिए जेस्चर इंटरसेप्ट करेगा. `Modifier.systemGestureExclusion` के ज़रिए, ऐप्लिकेशन मैन्युअल तरीके से इन जेस्चर को सीमित संख्या में मैनेज करने की जानकारी दे सकते हैं.

WindowInsets.mandatorySystemGestures

सिस्टम जेस्चर का सबसेट. इसे हमेशा सिस्टम मैनेज करेगा. साथ ही, Modifier.systemGestureExclusion के ज़रिए इसे ऑप्ट आउट नहीं किया जा सकता.

WindowInsets.displayCutout

डिसप्ले कटआउट (नॉच या पिनहोल) के साथ ओवरलैप होने से बचने के लिए ज़रूरी स्पेसिंग की जानकारी देने वाले इनसेट.

WindowInsets.waterfall

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

इन टाइप को, इनसेट के तीन "सुरक्षित" टाइप में बांटा गया है. इनसे यह पक्का किया जाता है कि कॉन्टेंट न दिखे:

इनसेट के ये "सुरक्षित" टाइप, प्लैटफ़ॉर्म के इनसेट के आधार पर, कॉन्टेंट को अलग-अलग तरीकों से सुरक्षित रखते हैं:

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