Kesitler hakkında

Ekran kesimi, bazı cihazlarda ekran yüzeyine doğru uzanan bir alandır. Cihazın ön tarafındaki önemli sensörler için yer sağlarken uçtan uca bir deneyim sunar.

Dikey modda kesme örneği
Şekil 1. Portre modunda kesim örneği
Yatay modda kesim örneği
Şekil 2. Yatay modda kesim örneği

Android, Android 9 (API düzeyi 28) ve sonraki sürümleri çalıştıran cihazlarda ekran kesimlerini destekler. Ancak cihaz üreticileri, Android 8.1 veya önceki sürümlerin yüklü olduğu cihazlarda da ekran kesiklerini destekleyebilir.

Bu sayfada, ekran kesimi olan cihazlarda Compose'da desteklemenin nasıl uygulanacağı açıklanmaktadır. Bu kapsamda, ekran kesimi alanı (ekran kesimini içeren, ekran yüzeyindeki uçtan uca dikdörtgen) ile nasıl çalışılacağı da ele alınmaktadır.

Varsayılan durum

API düzeyi 34 veya daha düşük olan uygulamalar ya da enableEdgeToEdge işlevini çağırmayan Etkinlikler, uygulama ekran kesme yerini içeren bir sistem çubuğuna çizim yapmadığı sürece varsayılan olarak kesme bölgesine çizim yapmaz.

Android 15 veya sonraki sürümlerin yüklü olduğu cihazlarda API düzeyi 35 veya sonraki sürümleri hedefleyen uygulamalar ya da enableEdgeToEdge işlevini çağıran ve çentik bölgesine çizim yapan Etkinlikler.

Başka bir deyişle, Android 15 veya sonraki sürümlerin yüklü olduğu cihazlarda API düzeyi 35 ya da sonraki sürümleri hedefleyen uygulamalardaki kaymayan pencereler için LAYOUT_IN_DISPLAY_CUTOUT_MODE_DEFAULT, LAYOUT_IN_DISPLAY_CUTOUT_MODE_SHORT_EDGES ve LAYOUT_IN_DISPLAY_CUTOUT_MODE_NEVER, LAYOUT_IN_DISPLAY_CUTOUT_MODE_ALWAYS olarak yorumlanır.

Kameranın etrafındaki boşluk bilgilerini manuel olarak işleme

Kesim alanının önemli metinleri, kontrolleri veya ince dokunma tanıma gerektiren etkileşimli öğeleri (kesim alanında dokunma hassasiyeti daha düşük olabilir) kapatmasını önlemek için kesim bilgilerini işlemeniz gerekir. Boşlukları işlerken durum çubuğu yüksekliğini sabit kodlamayın. Bu, içeriğin çakışmasına veya kesilmesine neden olabilir. Bunun yerine, kesikleri aşağıdaki yöntemlerden biriyle işleyin:

Compose'da, composable'larınızdaki kesik ekleri işlemek için displayCutout, safeContent veya safeDrawing kullanmanızı öneririz. Bu yaklaşım, gerektiğinde ekran kesme dolgusuna uymanıza veya gerekmediğinde bunu yoksaymanıza olanak tanır.

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