Informacje o wycinkach

Wycięcie w ekranie to obszar na niektórych urządzeniach, który wchodzi w powierzchnię wyświetlacza. Umożliwia to korzystanie z aplikacji na całym ekranie, a jednocześnie zapewnia miejsce na ważne czujniki z przodu urządzenia.

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

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

Na tej stronie dowiesz się, jak zaimplementować obsługę urządzeń z wycięciami w Compose, w tym jak pracować z obszarem wycięcia, czyli prostokątem na całym ekranie , który zawiera wycięcie.

Domyślny przypadek

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

Aplikacje kierowane na poziom interfejsu API 35 lub nowszy na urządzeniach z Androidem 15 lub nowszym albo aktywności, które wywołują funkcję enableEdgeToEdge, rysują w obszarze wycięcia.

Innymi słowy, w przypadku okien niepływających w aplikacjach kierowanych na poziom interfejsu API 35 lub nowszy na urządzeniach z Androidem 15 lub nowszym wartości 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.

Ręczne obsługiwanie informacji o wycięciu

Musisz obsługiwać informacje o wycięciu, aby zapobiec zasłanianiu przez obszar wycięcia ważnego tekstu, elementów sterujących lub interaktywnych, które wymagają precyzyjnego dotyku (czułość ekranu może być niższa w obszarze wycięcia). Podczas obsługiwania wycięć nie koduj na stałe wysokości paska stanu, ponieważ może to spowodować nakładanie się lub obcinanie treści. Zamiast tego obsługuj wycięcia w jeden z tych sposobów:

W przypadku Compose zalecamy używanie displayCutout, safeContent lub safeDrawing do obsługi wcięć wycięcia w elementach kompozycyjnych. To podejście pozwala w razie potrzeby uwzględnić dopełnienie wycięcia w ekranie lub je zignorować.

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