Oluşturma sırasında kesmeler

Ekran kesimi, bazı cihazlarda ekran yüzeyine kadar uzanan bir alandır. Uçtan uca deneyime olanak tanırken cihazın ön tarafındaki önemli sensörler için 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. Ancak cihaz üreticileri, Android 8.1 veya önceki sürümleri çalıştıran cihazlarda ekran kesimlerini de destekleyebilir.

Bu sayfada, Oluşturma'da kesimlere sahip cihazlar için desteğin nasıl uygulanacağı açıklanmaktadır. Buna, kesim alanı (diğer bir deyişle, ekran yüzeyindeki kesimi içeren kenardan kenara dikdörtgen) ile nasıl çalışılacağı da dahildir.

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

Varsayılan olarak, ekran kesimleri pencerenin içe aktarma bilgilerine dahil edilir. Bu nedenle, uygulamanızı uçtan uca yapmayla ilgili kılavuzu izlediğinizde uygulamanız, ekran kesimi alanlarını çizmez.

Örneğin, Modifier.windowInsetsPadding(WindowInsets.safeContent) veya Modifier.windowInsetsPadding(WindowInsets.safeDrawing) kullandığınızda uygulamanız otomatik olarak kesimin yerleştirildiği alanları çizmez. WindowInsets.safeContent ve WindowInsets.safeDrawing hem ekran kesimi bilgileri içerir hem de cihaz kesiminin bulunduğu yeri ç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 halletmeniz gerekir.

Kesme bilgilerini manuel olarak işleme

Kesme işlemlerini aşağıdaki yöntemlerden biriyle yapabilirsiniz:

Compose için genel temanızda windowLayoutInDisplayCutoutMode değerini default olarak ayarlamanız ve ardından composable'larınızdaki ek öğeleri işlemek için WindowInsets.displayCutout değerini kullanmanı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ıza veya gerek olmadığı durumlarda göz ardı etmenize olanak tanır.

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

Belirli composable'larda ekran kesimine saygı göstermek (diğerlerinde değil) için WindowInset.displayCutout değerini 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ündeki önemli öğelerin yerleşimine dikkat edin. Kesme alanının önemli metinleri, kontrolleri veya diğer bilgileri gizlemesine izin vermeyin.
  • Hassas dokunuş tanıma gerektiren etkileşimli öğeleri kesim alanına yerleştirmeyin veya genişletmeyin. Kesme alanında dokunma hassasiyeti daha düşük olabilir.
  • Uçtan uca rehberlik izlenirken kesim 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. İçeriğin çakışmasına veya kesilmesine neden olabileceğinden, durum çubuğu yüksekliğine kod yazmaktan 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ı kesim türlerine sahip cihazlarda test edin. Kesilen bir cihazınız yoksa aşağıdakileri yaparak Android 9 veya sonraki sürümleri çalıştıran herhangi bir cihaz ya da emülatörde yaygın kesim yapılandırmalarını simüle edebilirsiniz:

  1. Geliştirici seçeneklerini etkinleştirin.
  2. Geliştirici seçenekleri ekranında Çizim bölümüne gidin ve Kesme 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.