Wstawki okna

Platforma Android jest odpowiedzialna za rysowanie interfejsu systemu, takiego jak pasek stanu i pasek nawigacyjny. Ten interfejs systemu jest wyświetlany niezależnie od tego, z której aplikacji korzysta użytkownik.

WindowInsets udostępnia informacje o interfejsie systemu, aby zapewnić, że aplikacja rysuje w odpowiednim obszarze, a jej interfejs nie jest zasłaniany przez interfejs systemu.

Rysowanie od krawędzi do krawędzi za paskami systemu
Rysunek 1. Wyświetlanie treści od krawędzi do krawędzi za paskami systemu.

Na Androidzie 14 (poziom interfejsu API 34) i starszych wersjach interfejs aplikacji domyślnie nie jest rysowany pod paskami systemu i wycięciami na wyświetlaczu.

Na Androidzie 15 (API na poziomie 35) i nowszym aplikacja będzie rysowana pod paskami systemowymi i wycięciami na wyświetlaczu, gdy będzie kierowana na pakiet SDK 35. Zapewnia to większy komfort użytkownikom i umożliwia aplikacji pełne wykorzystanie dostępnego miejsca w oknie.

Wyświetlanie treści za interfejsem systemu jest nazywane wyświetlaniem od krawędzi do krawędzi. Na tej stronie dowiesz się więcej o różnych typach odcięć, o tym, jak tworzyć aplikacje bez ramek, oraz o tym, jak używać interfejsów API odcięć do animowania interfejsu i zapewnienia, że treści aplikacji nie są zasłaniane przez elementy interfejsu systemu.

Podstawy wstawiania

Gdy aplikacja zajmuje cały ekran, musisz zadbać o to, aby ważne treści i interakcje nie były zasłonięte przez interfejs systemu. Jeśli na przykład przycisk znajduje się za paskiem nawigacyjnym, użytkownik może nie być w stanie go kliknąć.

Rozmiar interfejsu systemu i informacje o jego położeniu są określane za pomocą wcięć.

Każda część interfejsu systemu ma odpowiedni typ wcięcia, który opisuje jego rozmiar i miejsce. Na przykład wstawki paska stanu określają rozmiar i położenie paska stanu, a wstawki paska nawigacyjnego określają rozmiar i położenie paska nawigacyjnego. Każdy typ wcięcia składa się z 4 wymiarów w pikselach: góra, lewa, prawa i dół. Te wymiary określają, jak daleko interfejs systemu rozciąga się od odpowiednich boków okna aplikacji. Aby uniknąć nakładania się na ten typ interfejsu systemu, interfejs aplikacji musi być odsunięty o tę wartość.

Te wbudowane typy odcięć Androida są dostępne w WindowInsets:

WindowInsets.statusBars

Wstawki opisujące paski stanu. Są to górne paski interfejsu systemu zawierające ikony powiadomień i inne wskaźniki.

WindowInsets.statusBarsIgnoringVisibility

Wstawki paska stanu, gdy są widoczne. Jeśli paski stanu są ukryte (z powodu przejścia do trybu pełnoekranowego), główne wstawki paska stanu będą puste, ale te wstawki nie będą puste.

WindowInsets.navigationBars

Wstawki opisujące paski nawigacyjne. Są to paski interfejsu systemu po lewej, prawej lub dolnej stronie urządzenia, które opisują pasek aplikacji lub ikony nawigacyjne. Mogą się one zmieniać w czasie działania aplikacji w zależności od preferowanej metody nawigacji użytkownika i interakcji z paskiem zadań.

WindowInsets.navigationBarsIgnoringVisibility

Wstawki paska nawigacyjnego, gdy jest on widoczny. Jeśli paski nawigacji są ukryte (z powodu przejścia do trybu pełnoekranowego), wstawki głównego paska nawigacji będą puste, ale wstawki te nie będą puste.

WindowInsets.captionBar

Wstawka opisująca dekorację okna interfejsu systemu, jeśli jest to okno w dowolnym kształcie, np. górny pasek tytułu.

WindowInsets.captionBarIgnoringVisibility

Wstawki paska napisów, gdy są widoczne. Jeśli paski napisów są ukryte, główne wstawki paska napisów będą puste, ale te wstawki będą niepuste.

WindowInsets.systemBars

Suma wcięć pasków systemowych, które obejmują paski stanu, paski nawigacyjne i pasek podpisów.

WindowInsets.systemBarsIgnoringVisibility

Wstawki paska systemowego, gdy jest on widoczny. Jeśli paski systemowe są ukryte (z powodu przejścia do trybu pełnoekranowego), główne wstawki paska systemowego będą puste, ale te wstawki nie będą puste.

WindowInsets.ime

Wstawki opisujące ilość miejsca na dole, które zajmuje klawiatura ekranowa.

WindowInsets.imeAnimationSource

Wstawki opisujące ilość miejsca zajmowanego przez klawiaturę ekranową przed bieżącą animacją klawiatury.

WindowInsets.imeAnimationTarget

Wstawki opisujące ilość miejsca, jaką zajmie klawiatura ekranowa po zakończeniu bieżącej animacji klawiatury.

WindowInsets.tappableElement

Rodzaj wstawki opisującej szczegółowe informacje o interfejsie nawigacji, podającej ilość miejsca, w którym „kliknięcia” będą obsługiwane przez system, a nie przez aplikację. W przypadku przezroczystych pasków nawigacyjnych z nawigacją przy użyciu gestów niektóre elementy aplikacji mogą być klikalne w interfejsie nawigacji systemowej.

WindowInsets.tappableElementIgnoringVisibility

Wstawki elementu, w który można kliknąć, gdy jest on widoczny. Jeśli elementy, w które można kliknąć, są ukryte (z powodu przejścia do trybu pełnoekranowego), główne wstawki elementów, w które można kliknąć, będą puste, ale te wstawki nie będą puste.

WindowInsets.systemGestures

Wstawki reprezentujące ilość wstawek, w których system będzie przechwytywać gesty nawigacyjne. Aplikacje mogą ręcznie określać obsługę ograniczonej liczby tych gestów za pomocą funkcji Modifier.systemGestureExclusion.

WindowInsets.mandatorySystemGestures

Podzbiór gestów systemowych, które zawsze są obsługiwane przez system i z których nie można zrezygnować za pomocą Modifier.systemGestureExclusion.

WindowInsets.displayCutout

Odcięcia reprezentujące ilość odstępu potrzebnego do uniknięcia nakładania się z wycięciem w ekranie (wcięciem lub otworem).

WindowInsets.waterfall

Wstawki przedstawiające zakrzywione obszary wyświetlacza wodospadu. Wyświetlacz typu waterfall ma zakrzywione obszary wzdłuż krawędzi ekranu, gdzie ekran zaczyna się owijać wokół boków urządzenia.

Te typy są podsumowane w 3 „bezpiecznych” typach wstawki, które zapewniają, że treści nie są zasłonięte:

Te „bezpieczne” typy wstawień chronią treści na różne sposoby w zależności od wstawień na platformie bazowej:

  • Używaj WindowInsets.safeDrawing, aby chronić treści, które nie powinny być rysowane pod żadnym interfejsem systemu. Jest to najczęstsze zastosowanie wstawek: zapobiega rysowaniu treści zasłoniętych przez interfejs systemu (częściowo lub całkowicie).
  • Użyj WindowInsets.safeGestures, aby chronić treści za pomocą gestów. Dzięki temu gesty systemowe nie będą kolidować z gestami aplikacji (np. w przypadku arkuszy dolnych, karuzel czy gier).
  • Używaj WindowInsets.safeContent jako kombinacji WindowInsets.safeDrawingWindowInsets.safeGestures, aby zapewnić brak nakładania się treści wizualnych i gestów.