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.
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:
Używanie
WindowInsets.displayCutout,WindowInsets.safeContentlubWindowInsets.safeDrawingDostęp do obiektu
Pathwycięcia za pomocąLocalView.current.rootWindowInsets.displayCutout
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())) }
Polecane dla Ciebie
- Uwaga: tekst linku jest wyświetlany, gdy język JavaScript jest wyłączony.
- Wcięcia okna w Compose
- Modyfikatory grafiki
- Styl akapitu