Oluşturma sırasında kesmeler

Ekran kesimi, bazı cihazlarda ekran yüzeyine uzanan bir alandır. Uçtan uca deneyime izin verirken cihazın ön kısmındaki önemli sensörler için de alan sağlar.

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

Android, Android 9 (API düzeyi 28) ve sonraki sürümleri çalıştıran cihazlarda ekran kesimlerini destekler. Bununla birlikte, cihaz üreticileri Android 8.1 veya önceki sürümleri çalıştıran cihazlarda ekran kesimlerini de destekleyebilir.

Bu sayfada, kesme alanı (ör. ekran yüzeyinde kesme alanını içeren uçtan uca dikdörtgen) ile nasıl çalışılacağı dahil olmak üzere, oluşturma'da kesim içeren cihazlar için desteğin nasıl sağlanacağı açıklanmaktadır.

Varsayılan büyük/küçük harf düzeni

Varsayılan olarak, ekran kesimleri pencere iç öğeleri bilgilerine eklenir. Bu nedenle, uygulamanızı uçtan uca yapma rehberini takip ettiğinizde uygulamanız ekran kesim alanlarında çizim yapmaz.

Örneğin, Modifier.windowInsetsPadding(WindowInsets.safeContent) veya Modifier.windowInsetsPadding(WindowInsets.safeDrawing) kullandığınızda uygulamanız otomatik olarak kesimin yerleştirildiği alanlarda çizim yapmaz. WindowInsets.safeContent ve WindowInsets.safeDrawing her ikisi de ekran kesimi bilgilerini içerir ve cihaz kesiminin olduğu yerde çizmez.

override fun onCreate(savedInstanceState: Bundle?) {
    super.onCreate(savedInstanceState)

    WindowCompat.setDecorFitsSystemWindows(window, false)

    setContent {
        Box(Modifier.windowInsetsPadding(WindowInsets.safeContent)) {
            // Any composable inside here will avoid drawing behind cutouts
        }
    }
}

Bu davranışı daha da özelleştirmek için kesim bilgilerini kendiniz işlemeniz gerekir.

Kesme bilgilerini manuel olarak işleme

Kesikleri aşağıdaki şekillerde kullanabilirsiniz:

Compose için genel temanızda windowLayoutInDisplayCutoutMode özelliğini default olarak ayarlamanız, ardından composable'larınızın eklerini işlemek için WindowInsets.displayCutout özelliğinden yararlanmanız önerilir:

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

Bu yaklaşım, gerektiğinde displayCutout dolgusunu dikkate almanızı veya gerekli olmadığı yerlerde yoksaymanızı sağlar.

Alternatif olarak, etkinlik temasını android:windowLayoutInDisplayCutoutMode başka bir seçeneğe ayarlayarak veya pencere özelliğini window.attributes.layoutInDisplayCutoutMode = LAYOUT_IN_DISPLAY_CUTOUT_MODE_DEFAULT ile ayarlayarak Görünüm Kesimi belgelerinde açıklanan ayarları uygulayabilirsiniz. Bununla birlikte, kesim modu tüm etkinliğe uygulanır ve tek tek composable'lar için kontrol edilemez.

Bazı composable'larda ekran kesimini korurken diğerlerini kullanmamak için WindowInset.displayCutout özelliğini kullanın. Bu API, gerektiğinde kesim bilgilerine erişmenizi sağlar.

En iyi uygulamalar

Ekran kesimleriyle çalışırken aşağıdakileri göz önünde bulundurun:

  • Kullanıcı arayüzünün kritik öğelerinin yerleşimine dikkat edin. Kesme alanının, önemli metinleri, kontrolleri veya diğer bilgileri kapatmasına izin vermeyin.
  • Hassas düzeyde tanıma gerektiren etkileşimli öğeleri, kesim alanına yerleştirmeyin veya genişletmeyin. Kesme alanında dokunma hassaslığı daha düşük olabilir.
  • Uçtan uca kılavuz boyunca kesit bilgileri safeDrawing / safeContent eklerine dahil edilir.
  • Mümkün olduğunda, içeriğinize uygulanacak uygun dolguyu belirlemek için Modifier.windowInsetsPadding(WindowInsets.safeDrawing) kullanın. İçeriklerin çakışmasına veya kesilmesine neden olabileceğinden durum çubuğu yüksekliğini sabitleştirmekten kaçının.

Kesitlerle içeriğinizin nasıl oluşturulduğunu test edin

Uygulamanızın tüm ekranlarını ve deneyimlerini test ettiğinizden emin olun. Mümkünse farklı kesimlere sahip cihazlarda test edin. Kesikli bir cihazınız yoksa aşağıdaki adımları uygulayarak Android 9 ya da sonraki sürümleri çalıştıran herhangi bir cihazda veya emülatörde yaygın kesim yapılandırmalarını simüle edebilirsiniz:

  1. Geliştirici seçenekleri'ni etkinleştirin.
  2. Geliştirici seçenekleri ekranında Çizim bölümüne gidin ve Kesit içeren bir ekranı simüle et'i seçin.
  3. Kesme türünü seçin.
    emülatörde ekran kesimi simülasyonu
    Şekil 3. İçeriğinizin nasıl oluşturulduğunu test etmek için Geliştirici seçeneklerini kullanın.