Informacje o wycinkach

Wycięcie w ekranie to obszar na niektórych urządzeniach, który wkracza w powierzchnię ekranu. Zapewnia to ekran od krawędzi do krawędzi, a jednocześnie pozostawia miejsce na ważne czujniki z przodu urządzenia.

Przykład wycięcia w trybie pionowym
Rysunek 1. Przykład wycięcia w trybie portretowym
Przykład wycięcia w orientacji poziomej
Rysunek 2. Przykład wycięcia w trybie poziomym

Android obsługuje wycięcia w ekranie na urządzeniach z Androidem 9 (poziom interfejsu API 28) lub nowszym. Producenci urządzeń mogą jednak obsługiwać wycięcia na wyświetlaczu na urządzeniach z Androidem 8.1 lub starszym.

Na tej stronie opisano, jak w Compose zaimplementować obsługę urządzeń z wycięciem, w tym jak pracować z obszarem wycięcia, czyli prostokątem od krawędzi do krawędzi na powierzchni ekranu, który zawiera wycięcie.

Domyślny przypadek

Aplikacje kierowane na poziom interfejsu API 34 lub niższego albo aktywności, które nie wywołują funkcji enableEdgeToEdge, nie będą domyślnie rysować w regionie wycięcia, chyba że aplikacja rysuje w pasku systemowym zawierającym wycięcie wyświetlacza.

Aplikacje kierowane na poziom API 35 lub wyższy na urządzeniach z Androidem 15 lub nowszym oraz aktywności wywołujące funkcję enableEdgeToEdge rysują w regionie wycięcia.

Innymi słowy, LAYOUT_IN_DISPLAY_CUTOUT_MODE_DEFAULT, LAYOUT_IN_DISPLAY_CUTOUT_MODE_SHORT_EDGES i LAYOUT_IN_DISPLAY_CUTOUT_MODE_NEVER są interpretowane jako LAYOUT_IN_DISPLAY_CUTOUT_MODE_ALWAYS w przypadku okien nieprzesuwanych w aplikacjach kierowanych na poziom API 35 lub nowszy na urządzeniach z Androidem 15 lub nowszym.

Ręczne zarządzanie informacjami o wycięciu

Musisz odpowiednio zarządzać informacjami o wycięciu, aby nie zasłaniało ono ważnych tekstów, elementów sterujących ani elementów interaktywnych wymagających precyzyjnego rozpoznawania dotyku (w wycięciu czułość na dotyk może być niższa). Podczas obsługi wycinków nie koduj sztywno wysokości paska stanu, ponieważ może to spowodować nakładanie się lub przycinanie treści. Zamiast tego możesz wykonać te czynności:

W przypadku usługi Compose zalecamy użycie displayCutout, safeContent lub safeDrawing do obsługi wstawionych wycinków w składanych komponentach. Dzięki temu możesz zachować odstęp od krawędzi ekranu w miejscach, w których jest to wymagane, lub zignorować go w miejscach, w których nie jest to wymagane.

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