Oluşturma sırasında kesmeler

Ekran kesimi, bazı cihazlarda ekran yüzeyine uzanan bir alandır. Cihazın ön tarafında önemli sensörler için yer sağlarken kenardan kenara bir deneyim sunar.

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

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

Bu sayfada, kesme alanı (yani ekran yüzeyinde kesmeyi içeren uçtan uca dikdörtgen) ile çalışmanın yanı sıra Oluştur'da kesime sahip cihazlar için desteğin nasıl uygulanacağı açıklanmaktadır.

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

Ekran kesikleri varsayılan olarak pencere içe eklemelerine dahil edilir. Bu nedenle, uygulamanızı kenarlara kadar doldurma kılavuzunu uyguladığınızda uygulamanız ekrandaki kesik alanlarda çizilmez.

Örneğin, Modifier.windowInsetsPadding(WindowInsets.safeContent) veya Modifier.windowInsetsPadding(WindowInsets.safeDrawing) kullanırken uygulamanız, kesitin yerleştirildiği alanları otomatik olarak çizmez. Hem WindowInsets.safeContent hem de WindowInsets.safeDrawing, ekrandaki kesik bilgileri içerir ve cihazdaki kesiklerin bulunduğu yerde çizim yapmaz.

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 kesme kenarı bilgilerini kendiniz işlemeniz gerekir.

Kesme kenarı bilgilerini manuel olarak işleme

Kesitleri aşağıdaki yöntemlerden birini kullanarak işleyebilirsiniz:

Oluşturma için genel temanızda windowLayoutInDisplayCutoutMode değerini default olarak ayarlamanız ve ardından, derlenebilir öğelerinizdeki iç içe yerleştirilen öğeleri işlemek için WindowInsets.displayCutout öğesinden 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ıza veya gerekmediğinde yoksaymanıza olanak tanır.

Alternatif olarak, etkinlik temasını android:windowLayoutInDisplayCutoutMode başka bir seçeneğe ayarlayarak veya window.attributes.layoutInDisplayCutoutMode = LAYOUT_IN_DISPLAY_CUTOUT_MODE_DEFAULT'ı kullanarak pencere özelliğini ayarlayarak Görüntü Kesintisi dokümanlarında açıklanan ayarları da uygulayabilirsiniz. Ancak, kesit modu daha sonra tüm etkinliğe uygulanır ve tek bir kompozisyon için kontrol edilemez.

Belirli kompozisyonlarda ekrandaki kesik alanına uymak için WindowInset.displayCutout öğesini kullanın. Bu API, gerektiğinde kesit bilgilerine erişmenize olanak tanır.

En iyi uygulamalar

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

  • Kullanıcı arayüzünün kritik öğelerinin yerleşimine dikkat edin. Kesilen alanın önemli metinleri, kontrolleri veya diğer bilgileri gizlemesine izin vermeyin.
  • İnce dokunma tanıma gerektiren etkileşimli öğeleri, kesik alana yerleştirmeyin veya bu alana uzatmayın. Kesik alanda dokunma hassasiyeti daha düşük olabilir.
  • Kenardan kenara yönlendirme uygulanırken, safeDrawing / safeContent iç içe yerleştirilmiş resimlerine kesik bilgileri eklenir.
  • Mümkün olduğunda, içeriğinize uygulanacak uygun dolguyu belirlemek için Modifier.windowInsetsPadding(WindowInsets.safeDrawing) simgesini kullanın. İçeriklerin örtüşmesine veya kesilmesine neden olabileceğinden durum çubuğu yüksekliğini sabit kodlamaktan kaçının.

İçeriğinizin, kesiklerle nasıl oluşturulduğunu test etme

Uygulamanızın tüm ekranlarını ve deneyimlerini test ettiğinizden emin olun. Mümkünse farklı türde kesiklere sahip cihazlarda test edin. Kesikli ekrana sahip bir cihazınız yoksa aşağıdakileri yaparak Android 9 veya sonraki bir sürümün yüklü olduğu herhangi bir cihazda ya da emülatörde yaygın kesik ekran 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 gidip Kesimli ekranı simüle et'i seçin.
  3. Çıkarma türünü seçin.
    Emülatörde ekran kesimini simüle etme
    Şekil 3. İçeriğinizin nasıl oluşturulduğunu test etmek için Geliştirici seçenekleri'ni kullanın.