Pencere iç içe eklemeleri hakkında

Android platformu, durum çubuğu ve gezinme çubuğu gibi sistem kullanıcı arayüzünü çizmekten sorumludur. Bu sistem kullanıcı arayüzü, kullanıcının hangi uygulamayı kullandığından bağımsız olarak gösterilir.

WindowInsets, uygulamanızın doğru alanda çizim yapmasını ve kullanıcı arayüzünüzün sistem kullanıcı arayüzü tarafından engellenmemesini sağlamak için sistem kullanıcı arayüzü hakkında bilgi sağlar.

Sistem çubuklarının arkasına çizim yapmak için uçtan uca geçiş
Şekil 1. Sistem çubuklarının arkasına çizim yapmak için uçtan uca geçiş yapma

Android 14 (API düzeyi 34) ve önceki sürümlerde uygulamanızın kullanıcı arayüzü, varsayılan olarak sistem çubuklarının ve ekran kesintilerinin altına çizilmez.

Android 15 (API düzeyi 35) ve sonraki sürümlerde, uygulamanız SDK 35'i hedeflediğinde sistem çubuklarının ve ekran kesintilerinin altında çizim yapar. Bu sayede daha sorunsuz bir kullanıcı deneyimi sunulur ve uygulamanız, kullanılabilir pencere alanından tam olarak yararlanabilir.

İçeriğin sistem kullanıcı arayüzünün arkasında gösterilmesine uçtan uca kullanım denir. Bu sayfada, farklı ek türleri, uçtan uca ekranı etkinleştirme ve kullanıcı arayüzünüzü canlandırmak için ek API'lerini kullanma ve uygulamanızın içeriğinin sistem kullanıcı arayüzü öğeleri tarafından engellenmediğinden emin olma hakkında bilgi edineceksiniz.

İçerik yerleştirmenin temelleri

Bir uygulama uçtan uca olduğunda önemli içeriklerin ve etkileşimlerin sistem kullanıcı arayüzü tarafından engellenmediğinden emin olmanız gerekir. Örneğin, gezinme çubuğunun arkasına yerleştirilen bir düğmeyi kullanıcı tıklayamayabilir.

Sistem kullanıcı arayüzünün boyutu ve yerleştirildiği yerle ilgili bilgiler, iç kısımlar kullanılarak belirtilir.

Sistem kullanıcı arayüzünün her bölümünde, boyutunu ve yerleştirildiği yeri açıklayan karşılık gelen bir iç metin türü bulunur. Örneğin, durum çubuğu iç kısımları durum çubuğunun boyutunu ve konumunu, gezinme çubuğu iç kısımları ise gezinme çubuğunun boyutunu ve konumunu sağlar. Her içe yerleştirme türü dört piksel boyutundan oluşur: üst, sol, sağ ve alt. Bu boyutlar, sistem kullanıcı arayüzünün uygulama penceresinin ilgili kenarlarından ne kadar uzandığını belirtir. Bu nedenle, bu tür sistem kullanıcı arayüzüyle çakışmayı önlemek için uygulama kullanıcı arayüzü bu miktarda içe yerleştirilmelidir.

Bu yerleşik Android içe yerleştirme türleri WindowInsets aracılığıyla kullanılabilir:

WindowInsets.statusBars

Durum çubuklarını açıklayan iç kısımlar. Bunlar, bildirim simgelerini ve diğer göstergeleri içeren üst sistem kullanıcı arayüzü çubuklarıdır.

WindowInsets.statusBarsIgnoringVisibility

Görünür olduklarında durum çubuğu ekleri. Durum çubukları gizliyse (yoğun tam ekran moduna girilmesi nedeniyle) ana durum çubuğu iç kısımları boş olur ancak bu iç kısımlar boş olmaz.

WindowInsets.navigationBars

Gezinme çubuklarını açıklayan ekler. Bunlar, cihazın sol, sağ veya alt tarafında bulunan ve görev çubuğunu ya da gezinme simgelerini açıklayan sistem kullanıcı arayüzü çubuklarıdır. Bunlar, kullanıcının tercih ettiği gezinme yöntemine ve görev çubuğuyla etkileşime bağlı olarak çalışma zamanında değişebilir.

WindowInsets.navigationBarsIgnoringVisibility

Görünür olduklarında gezinme çubuğu ekleri. Gezinme çubukları gizliyse (tam ekran moduna girilmesi nedeniyle) ana gezinme çubuğu ekleri boş olur ancak bu ekler boş olmaz.

WindowInsets.captionBar

Serbest biçimli bir penceredeyse sistem kullanıcı arayüzü pencere dekorasyonunu (ör. üst başlık çubuğu) açıklayan iç metin.

WindowInsets.captionBarIgnoringVisibility

Görünür olduklarında başlık çubuğu ekleri. Altyazı çubukları gizliyse ana altyazı çubuğu ekleri boş olur ancak bu ekler boş olmaz.

WindowInsets.systemBars

Durum çubukları, gezinme çubukları ve başlık çubuğunu içeren sistem çubuğu eklerinin birleşimi.

WindowInsets.systemBarsIgnoringVisibility

Görünür olduklarında sistem çubuğu ekleri. Sistem çubukları gizliyse (yoğun tam ekran moduna girilmesi nedeniyle) ana sistem çubuğu iç kısımları boş olur ancak bu iç kısımlar boş olmaz.

WindowInsets.ime

Yazılım klavyesinin alt kısımda kapladığı alan miktarını açıklayan ekler.

WindowInsets.imeAnimationSource

Yazılım klavyesinin mevcut klavye animasyonundan önce kapladığı alan miktarını açıklayan ekler.

WindowInsets.imeAnimationTarget

Yazılım klavyesinin mevcut klavye animasyonundan sonra kaplayacağı alan miktarını açıklayan ekler.

WindowInsets.tappableElement

Gezinme kullanıcı arayüzü hakkında daha ayrıntılı bilgi veren, "dokunmaların" uygulama tarafından değil, sistem tarafından işleneceği alan miktarını belirten bir iç boşluk türü. Hareketle gezinme özelliğine sahip şeffaf gezinme çubuklarında, bazı uygulama öğelerine sistem gezinme kullanıcı arayüzü üzerinden dokunulabilir.

WindowInsets.tappableElementIgnoringVisibility

Görünür olduklarında dokunulabilir öğe ekleri. Dokunulabilir öğeler gizliyse (tam ekran moduna girilmesi nedeniyle) ana dokunulabilir öğe iç kısımları boş olur ancak bu iç kısımlar boş olmaz.

WindowInsets.systemGestures

Sistemin gezinme hareketlerini algılayacağı alan miktarını temsil eden iç kısımlar. Uygulamalar, Modifier.systemGestureExclusion kullanarak bu hareketlerin sınırlı bir miktarını manuel olarak işleyebilir.

WindowInsets.mandatorySystemGestures

Her zaman sistem tarafından işlenecek ve Modifier.systemGestureExclusion kullanılarak devre dışı bırakılamayacak sistem hareketlerinin bir alt kümesi.

WindowInsets.displayCutout

Ekran kesintisiyle (çentik veya iğne deliği) çakışmayı önlemek için gereken boşluk miktarını temsil eden iç kısımlar.

WindowInsets.waterfall

Şelale ekranın kavisli alanlarını temsil eden iç kısımlar. Şelale ekran, ekranın cihazın yan taraflarına doğru kıvrılmaya başladığı kenarlar boyunca kavisli alanlara sahiptir.

Bu türler, içeriğin gizlenmemesini sağlayan üç "güvenli" içe yerleştirme türüyle özetlenir:

Bu "güvenli" içe yerleştirme türleri, temel platform içe yerleştirmelerine göre içeriği farklı şekillerde korur:

  • Sistem kullanıcı arayüzünün altında çizilmemesi gereken içerikleri korumak için WindowInsets.safeDrawing kullanın. Bu, içe yerleştirmelerin en yaygın kullanımıdır: Sistem kullanıcı arayüzü tarafından gizlenen (kısmen veya tamamen) içeriklerin çizilmesini önlemek.
  • İçerikleri hareketlerle korumak için WindowInsets.safeGestures kullanın. Bu sayede sistem hareketlerinin uygulama hareketleriyle (ör. alt sayfalar, bantlar veya oyunlar için olanlar) çakışması önlenir.
  • İçeriğin görsel olarak ve hareket açısından çakışmadığından emin olmak için WindowInsets.safeContent'ı WindowInsets.safeDrawing ve WindowInsets.safeGestures'ın bir kombinasyonu olarak kullanın.