काट-छांट करने की सुविधा के बारे में जानकारी

डिसप्ले कटआउट, कुछ डिवाइसों पर मौजूद एक ऐसा हिस्सा होता है जो डिसप्ले की सतह तक फैला होता है. इससे डिवाइस के सामने वाले हिस्से में ज़रूरी सेंसर के लिए जगह मिलती है. साथ ही, एज-टू-एज अनुभव मिलता है.

पोर्ट्रेट मोड में कटआउट का उदाहरण
पहली इमेज. पोर्ट्रेट मोड में कटआउट का उदाहरण
लैंडस्केप मोड में कटआउट का उदाहरण
दूसरी इमेज. लैंडस्केप मोड में कटआउट का उदाहरण

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

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

डिफ़ॉल्ट केस

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

Android 15 या इसके बाद के वर्शन वाले डिवाइसों पर, एपीआई लेवल 35 या इसके बाद के वर्शन को टारगेट करने वाले ऐप्लिकेशन या enableEdgeToEdge को कॉल करने वाली गतिविधियां, कटआउट वाले हिस्से में ड्रॉ करती हैं.

दूसरे शब्दों में, Android 15 या इसके बाद के वर्शन वाले डिवाइसों पर, एपीआई लेवल 35 या इसके बाद के वर्शन को टारगेट करने वाले ऐप्लिकेशन में, फ़्लोटिंग न होने वाली विंडो के लिए LAYOUT_IN_DISPLAY_CUTOUT_MODE_DEFAULT, LAYOUT_IN_DISPLAY_CUTOUT_MODE_SHORT_EDGES, और LAYOUT_IN_DISPLAY_CUTOUT_MODE_NEVER को LAYOUT_IN_DISPLAY_CUTOUT_MODE_ALWAYS के तौर पर समझा जाता है.

कटआउट की जानकारी को मैन्युअल तरीके से मैनेज करना

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

Compose के लिए, हमारा सुझाव है कि आप अपने कंपोज़ेबल में कटआउट इनसेट को मैनेज करने के लिए, displayCutout, safeContent या safeDrawing का इस्तेमाल करें. इस तरीके से, ज़रूरत के हिसाब से डिसप्ले कटआउट पैडिंग का इस्तेमाल किया जा सकता है या ज़रूरत न होने पर इसे अनदेखा किया जा सकता है.

Canvas(modifier = Modifier.fillMaxSize().windowInsetsPadding(WindowInsets.displayCutout)) {
    drawRect(Color.Red, style = Stroke(2.dp.toPx()))
}