Ekran kesimlerini destekleme

"Oluştur" yöntemini deneyin
Jetpack Compose, Android için önerilen kullanıcı arayüzü araç setidir. Oluşturma'da ekran kesimleriyle nasıl çalışacağınızı öğrenin.

Ekran kesimi, bazı cihazlarda görünen bir alandır ekran yüzeyine kadar uzanır. Uçtan uca bir deneyim sunar ön tarafındaki önemli sensörler için alan sağlar.

Android, Android 9 (API düzeyi 28) yüklü cihazlarda ekran kesimlerini ve daha yüksek. Ancak cihaz üreticileri, Android 8.1 veya önceki sürümleri çalıştıran cihazlar.

Bu dokümanda, kesmelere sahip cihazlar için desteğin nasıl uygulanacağı açıklanmaktadır. kesim alanının (uçtan uca) nasıl çalışılacağını da kesmeyi içeren ekran yüzeyinde 3-3 kare olacak şekilde.

Üst orta ekran kesimi örneğini gösteren resim
Şekil 1. 1 Görüntülü Reklam Ağı kesim.

Uygulamanızın kesim alanlarını nasıl işleyeceğini seçin

İçeriğinizin bir kesim alanıyla çakışmamasını istemiyorsanız genellikle ve içeriğin durum çubuğuyla ve başlıkla çakışmadığından emin olmak için gezinme çubuğu. Kesim alanında dosya oluşturuyorsanız WindowInsetsCompat.getDisplayCutout() DisplayCutout nesnesini almak için her bir kesim için güvenli ekler ve sınırlayıcı kutu içeren bir kod snippet'i ekleyin. Bu API'ler içeriğinizin kesimle çakışıp çakışmadığını kontrol gerekirse yeniden konumlandırabilirsiniz.

İçeriğin kesim alanının arkasına yerleştirilip yerleştirilmediğini de belirleyebilirsiniz. İlgili içeriği oluşturmak için kullanılan layoutInDisplayCutoutMode pencere düzeni özelliği, içeriğinizin kesim alanında nasıl çizileceğini kontrol eder. layoutInDisplayCutoutMode öğesini şu değerlerden birine ayarlayabilirsiniz:

  • LAYOUT_IN_DISPLAY_CUTOUT_MODE_DEFAULT: Ekran kesimi bir tıklayın. Aksi takdirde, pencere, ekran kesimiyle çakışmaz; şunun için: Örneğin, içerik yatay modda görüntülendiğinde sinemaskop biçimine dönüştürülebilir. Eğer Uygulamanız SDK 35'i hedefliyorsa bu, kayan olmayan reklamlar için ALWAYS olarak yorumlanır pencereler.
  • LAYOUT_IN_DISPLAY_CUTOUT_MODE_ALWAYS: içeriğin kesme alanlarına erişmesine her zaman izin verilir. Uygulamanız bunu hedefliyorsa Android 15 yüklü bir cihazda çalışıyorsa ve bu modlar için izin verilen tek mod budur. kenardan kenara ekran sağlamak için kayan olmayan pencerelere sahipler.
  • LAYOUT_IN_DISPLAY_CUTOUT_MODE_SHORT_EDGES: içerik, hem dikey hem de yatay modlarda kesme alanında oluşturulur. Şunları Yapmayın: bu özelliği kullanmaya devam edebilirsiniz. Uygulamanız SDK 35'i hedefliyorsa bu durum şu şekilde yorumlanır: Kayan olmayan pencereler için ALWAYS.
  • LAYOUT_IN_DISPLAY_CUTOUT_MODE_NEVER: içerik hiçbir zaman kesme alanında oluşturulmaz. Uygulamanız SDK 35'i hedefliyorsa bu kayan olmayan pencereler için ALWAYS olarak yorumlanır.

Kesme modunu programlı olarak veya bir style [stil] ekleyin. Aşağıdakiler örnek, LAYOUT_IN_DISPLAY_CUTOUT_MODE_SHORT_EDGES öğesini uygulamak için bir stil tanımlar etkinliğiyle ilişkilendirilmesi gerekir.

<style name="ActivityTheme">
  <item name="android:windowLayoutInDisplayCutoutMode">
    shortEdges <!-- default, shortEdges, or never -->
  </item>
</style>

Aşağıdaki bölümlerde farklı kesme modları daha ayrıntılı olarak açıklanmaktadır.

Varsayılan davranış

Uygulamanız SDK 35'i hedefliyorsa ve Android 15 cihazda çalışıyorsa LAYOUT_IN_DISPLAY_CUTOUT_MODE_ALWAYS varsayılan davranıştır ve LAYOUT_IN_DISPLAY_CUTOUT_MODE_DEFAULT şu şekilde yorumlanır: Kayan olmayan pencereler için LAYOUT_IN_DISPLAY_CUTOUT_MODE_ALWAYS.

Aksi takdirde LAYOUT_IN_DISPLAY_CUTOUT_MODE_DEFAULT varsayılan ayardır.

Kısa kenar kesme alanlarında içerik oluşturun

Uygulamanız SDK 35'i hedefliyorsa ve Android 15 cihazda çalışıyorsa LAYOUT_IN_DISPLAY_CUTOUT_MODE_SHORT_EDGES şu şekilde yorumlanır: Kayan olmayan pencereler için LAYOUT_IN_DISPLAY_CUTOUT_MODE_ALWAYS.

LAYOUT_IN_DISPLAY_CUTOUT_MODE_SHORT_EDGES ile içerik, ekranın her ikisinde de ekranın kısa kenarındaki kesim alanına ister sistem çubuklarının gizli ister gizli görünür. Bu modu kullanırken hiçbir önemli içeriğin kesme alanından yararlanın.

Aşağıdaki resimde bir LAYOUT_IN_DISPLAY_CUTOUT_MODE_SHORT_EDGES örneği verilmiştir dikey bir cihaz için:

Dikey moddayken kesim alanında içerik oluşturmayı gösteren resim
Şekil 2. Kesme alanında içerik oluşturma portre modunda.

Aşağıdaki resimde bir LAYOUT_IN_DISPLAY_CUTOUT_MODE_SHORT_EDGES örneği verilmiştir yatay modda:

Yatay moddayken kesim alanında içerik oluşturmayı gösteren resim
Şekil 3. Kesme alanında içerik oluşturma yatay moddayken.

Bu modda pencere, ekranın kısa kenarındaki kesimlerin altından uzanır. hem dikey hem de yatay yönde görebilirsiniz.

Köşedeki bir kesimin kısa kenarda olduğu kabul edilir:

Köşesinde kesimli bir cihazın gösterildiği resim
Şekil 4. Köşesi kesik bir cihaz.

Ekran kesimi alanındaki hiçbir zaman içerik oluşturma

Uygulamanız SDK 35'i hedefliyorsa ve Android 15 cihazda çalışıyorsa LAYOUT_IN_DISPLAY_CUTOUT_MODE_NEVER şu şekilde yorumlanır: Kayan olmayan pencereler için LAYOUT_IN_DISPLAY_CUTOUT_MODE_ALWAYS.

LAYOUT_IN_DISPLAY_CUTOUT_MODE_NEVER ile pencerede hiçbir zaman kesme alanıyla çakışıyor.

Aşağıda LAYOUT_IN_DISPLAY_CUTOUT_MODE_NEVER için bir örnektir. dikey:

Dikey için LAYOUT_IN_DISPLAY_CUTOUT_MODE_NEVER öğesini gösteren resim
Şekil 5. Önden yüklenen Dikey mod için LAYOUT_IN_DISPLAY_CUTOUT_MODE_NEVER.

Aşağıda LAYOUT_IN_DISPLAY_CUTOUT_MODE_NEVER için bir örnektir. yatay mod:

Yatay için LAYOUT_IN_DISPLAY_CUTOUT_MODE_NEVER öğesini gösteren resim
Şekil 6. Önden yüklenen Yatay modda LAYOUT_IN_DISPLAY_CUTOUT_MODE_NEVER.

Ekran kesimi desteği için 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. URL'nin kesme alanı önemli metinlerin, kontrollerin veya diğer bilgilerin görünmesini engeller.
  • Hassas dokunuş gerektiren etkileşimli öğeleri yerleştirmeyin veya genişletmeyin. kesme alanına da dâhildir. Dokunma hassasiyeti kesme alanından yararlanın.
  • Mümkünse şunu kullanın: WindowInsetsCompat - durum çubuğu yüksekliğini alma ve uygulanacak uygun dolguyu belirleme daha fazla bilgi edineceksiniz. Durum çubuğu yüksekliğini koda gömmekten kaçının, aksi takdirde veya kesilmiş içerikler.

    Hatalı ek kurulumu için üst kısımdaki içeriğin kesildiğini gösteren resim
    Şekil 7. Şunlar için WindowInsetsCompat kullanın: içeriklerin çakışmasından veya kesilmesinden kaçının.
  • View.getLocationInWindow() kullanın uygulamanızın ne kadar pencere alanı kullandığını belirler. Uygulamanın yalnızca pencerenin tamamını kullanın ve View.getLocationOnScreen().

  • Uygulamanızın yapması gerekiyorsa always, shortEdges veya never kesme modlarını kullanın yoğun içerik moduna geçiş yapabilir ve bu moddan çıkabilirsiniz. Varsayılan kesme davranışı sistem çubukları varken kesme alanında oluşturulacak içerik gösterilir ancak yoğun içerik modundayken bu geçerli değildir. Bu durum, içeriğin yükselmesine neden olur. aşağıdaki örnekte gösterildiği gibi geçişler sırasında azaltılabilir.

    Geçişler sırasında yukarı ve aşağı hareket eden içeriği gösteren resim.
    Şekil 8. Yukarı ve aşağı hareket eden içerik örneği bahsedeceğim.
  • Yoğun içerik modunda, pencere veya ekran koordinatlarını kullanma konusunda dikkatli olun, çünkü uygulamanız sinemaskop efektiyle ekranın tamamını kullanmıyor. RACI matrisinde sinemaskop, ekran başlangıcından alınan koordinatlar koordinatlarla aynı değilse . Ekran koordinatlarını görünümün koordinatlarına koordinatlarını getLocationOnScreen() kullanarak gerektiği gibi ayarlayın. Aşağıdaki resim içerik sinemaskop yapıldığında koordinatların nasıl farklılık gösterdiğini gösterir:

    İçerik sinemaskopken pencere ve ekran koordinatlarını gösteren bir resim.
    Şekil 9. Pencere ve ekran koordinatlarının karşılaştırılması içeriği sinemaskop.
  • MotionEvent ile çalışırken şunu kullan: MotionEvent.getX() ve Kaçınılması için MotionEvent.getY() benzer koordinat sorunları var. Kullanma MotionEvent.getRawX() veya MotionEvent.getRawY().

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

Uygulamanızın tüm ekranlarını ve deneyimlerini test edin. Farklı özelliklere sahip cihazlarda test edin: bu yöntemi kullanın. Kesik bir cihazınız yoksa şunları yapabilirsiniz: Android çalıştıran herhangi bir cihazda veya emülatörde ortak kesim yapılandırmalarını simüle et Aşağıdakileri yaparak 9 veya üzeri bir sayı belirtin:

  1. Geliştirici seçeneklerini etkinleştirin.
  2. Geliştirici seçenekleri ekranında Çizim bölümüne gidin Kesim içeren bir ekranı simüle et'i seçin.
  3. Kesme türünü seçin.

    Emülatörde ekran kesiminin nasıl simüle edileceğini gösteren resim
    Şekil 10. Uygulamanızın performansını test etmenize ve belirir.

Ek kaynaklar