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.
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ęciami w ekranie, w tym jak pracować z obszarem wycięcia, czyli prostokątem na powierzchni ekranu od krawędzi do krawędzi, 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:
Używam
WindowInsets.displayCutout
,WindowInsets.safeContent
lubWindowInsets.safeDrawing
.Dostęp do obiektu wycinanki
Path
za pomocąLocalView.current.rootWindowInsets.displayCutout
W przypadku usługi Compose zalecamy użycie displayCutout
, safeContent
lub safeDrawing
, aby obsługiwać w komponowanych elementach wstawione wycięcia. Dzięki temu możesz zachować odstęp od krawędzi wyświetlacza 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())) }
Testowanie renderowania treści z wycinkami
Przetestuj wszystkie ekrany i funkcje aplikacji. Jeśli to możliwe, przetestuj aplikację na urządzeniach z różnymi typami wycięć. Jeśli nie masz urządzenia z wycięciem, możesz symulować typowe konfiguracje wycięć na dowolnym urządzeniu lub emulatorze z Androidem 9 lub nowszym:
- Włącz Opcje programisty.
- Na ekranie Opcje programisty przewiń w dół do sekcji Rysowanie i wybierz Symuluj wyświetlacz z wcięciem.
- Wybierz typ wycinania.
Polecane dla Ciebie
- Uwaga: tekst linku jest wyświetlany, gdy obsługa JavaScript jest wyłączona
- Okna w edytorze
- Modyfikatory graficzne
- Akapit ze stylem