Fenstereinbauten

Die Android-Plattform ist für das Zeichnen der System-UI verantwortlich, z. B. der Statusleiste und der Navigationsleiste. Diese System-UI wird unabhängig davon angezeigt, welche App der Nutzer verwendet.

WindowInsets enthält Informationen zur System-UI, damit Ihre App im richtigen Bereich gezeichnet wird und die UI nicht durch die System-UI verdeckt wird.

Vom Rand zum Rand zeichnen, um hinter den Systemleisten zu zeichnen
Abbildung 1. Randlos zeichnen, um hinter den Systemleisten zu zeichnen.

Unter Android 14 (API-Level 34) und niedriger wird die UI Ihrer App standardmäßig nicht unter den Systemleisten und Display-Aussparungen gezeichnet.

Unter Android 15 (API-Level 35) und höher wird Ihre App unter den Systemleisten und Display-Aussparungen gezeichnet, sobald sie auf SDK 35 ausgerichtet ist. Das führt zu einer nahtloseren Nutzererfahrung und ermöglicht es Ihrer App, den verfügbaren Fensterbereich voll auszunutzen.

Das Anzeigen von Inhalten hinter der System-UI wird als randlos zeichnen bezeichnet. Auf dieser Seite erfahren Sie mehr über die verschiedenen Arten von Insets, wie Sie randlos zeichnen und wie Sie die Inset-APIs verwenden, um Ihre UI zu animieren und sicherzustellen, dass die Inhalte Ihrer App nicht durch System-UI-Elemente verdeckt werden.

Grundlagen zu Insets

Wenn eine App randlos zeichnet, müssen Sie dafür sorgen, dass wichtige Inhalte und Interaktionen nicht durch die System-UI verdeckt werden. Wenn sich beispielsweise eine Schaltfläche hinter der Navigationsleiste befindet, kann der Nutzer möglicherweise nicht darauf klicken.

Die Größe der System-UI und Informationen zu ihrer Position werden über Insets angegeben.

Jeder Teil der System-UI hat einen entsprechenden Inset-Typ, der seine Größe und Position beschreibt. Statusleisten-Insets geben beispielsweise die Größe und Position der Statusleiste an, während Navigationsleisten-Insets die Größe und Position der Navigationsleiste angeben. Jeder Inset-Typ besteht aus vier Pixeldimensionen: oben, links, rechts und unten. Diese Dimensionen geben an, wie weit sich die System-UI von den entsprechenden Seiten des App-Fensters erstreckt. Um Überschneidungen mit dieser Art von System-UI zu vermeiden, muss die App-UI daher um diesen Betrag eingerückt werden.

Diese integrierten Android-Inset-Typen sind über WindowInsets verfügbar:

WindowInsets.statusBars

Die Insets, die die Statusleisten beschreiben. Das sind die oberen System-UI-Leisten, die Benachrichtigungssymbole und andere Anzeigen enthalten.

WindowInsets.statusBarsIgnoringVisibility

Die Statusleisten-Insets für den Fall, dass sie sichtbar sind. Wenn die Statusleisten derzeit ausgeblendet sind (weil der immersive Vollbildmodus aktiviert ist), sind die Haupt-Statusleisten-Insets leer, diese Insets jedoch nicht.

WindowInsets.navigationBars

Die Insets, die die Navigationsleisten beschreiben. Das sind die System-UI-Leisten auf der linken, rechten oder unteren Seite des Geräts, die die Taskleiste oder Navigationssymbole beschreiben. Diese können sich zur Laufzeit ändern, je nachdem, welche Navigationsmethode der Nutzer bevorzugt und wie er mit der Taskleiste interagiert.

WindowInsets.navigationBarsIgnoringVisibility

Die Navigationsleisten-Insets für den Fall, dass sie sichtbar sind. Wenn die Navigationsleisten derzeit ausgeblendet sind (weil der immersive Vollbildmodus aktiviert ist), sind die Haupt-Navigationsleisten-Insets leer, diese Insets jedoch nicht.

WindowInsets.captionBar

Das Inset, das die Fensterdekoration der System-UI beschreibt, wenn sie sich in einem Freiformfenster befindet, z. B. die obere Titelleiste.

WindowInsets.captionBarIgnoringVisibility

Die Titelleisten-Insets für den Fall, dass sie sichtbar sind. Wenn die Titelleisten derzeit ausgeblendet sind, sind die Haupt-Titelleisten-Insets leer, diese Insets jedoch nicht.

WindowInsets.systemBars

Die Vereinigung der Systemleisten-Insets, zu denen die Statusleisten, Navigationsleisten und die Titelleiste gehören.

WindowInsets.systemBarsIgnoringVisibility

Die Systemleisten-Insets für den Fall, dass sie sichtbar sind. Wenn die Systemleisten derzeit ausgeblendet sind (weil der immersive Vollbildmodus aktiviert ist), sind die Haupt-Systemleisten-Insets leer, diese Insets jedoch nicht.

WindowInsets.ime

Die Insets, die den Platz beschreiben, den die Softwaretastatur unten einnimmt.

WindowInsets.imeAnimationSource

Die Insets, die den Platz beschreiben, den die Bildschirmtastatur vor der aktuellen Tastaturanimation eingenommen hat.

WindowInsets.imeAnimationTarget

Die Insets, die den Platz beschreiben, den die Softwaretastatur nach der aktuellen Tastaturanimation einnehmen wird.

WindowInsets.tappableElement

Ein Inset-Typ, der detailliertere Informationen zur Navigations-UI enthält und angibt, wie viel Platz für „Taps“ vorhanden ist, die vom System und nicht von der App verarbeitet werden. Bei transparenten Navigationsleisten mit Gestennavigation können einige App-Elemente über die System-Navigations-UI angetippt werden.

WindowInsets.tappableElementIgnoringVisibility

Die Insets für angetippte Elemente für den Fall, dass sie sichtbar sind. Wenn die angetippten Elemente derzeit ausgeblendet sind (weil der immersive Vollbildmodus aktiviert ist), sind die Haupt-Insets für angetippte Elemente leer, diese Insets jedoch nicht.

WindowInsets.systemGestures

Die Insets, die den Betrag der Insets darstellen, bei denen das System Gesten für die Navigation abfängt. Apps können die Verarbeitung einer begrenzten Anzahl dieser Gesten manuell über Modifier.systemGestureExclusion angeben.

WindowInsets.mandatorySystemGestures

Eine Teilmenge der Systemgesten, die immer vom System verarbeitet werden und die nicht über Modifier.systemGestureExclusion deaktiviert werden können.

WindowInsets.displayCutout

Die Insets, die den Abstand darstellen, der erforderlich ist, um Überschneidungen mit einer Display-Aussparung (Notch oder Loch) zu vermeiden.

WindowInsets.waterfall

Die Insets, die die gekrümmten Bereiche eines Wasserfall-Displays darstellen. Ein Wasserfall-Display hat gekrümmte Bereiche an den Rändern des Bildschirms, an denen sich der Bildschirm an den Seiten des Geräts entlang biegt.

Diese Typen werden durch drei „sichere“ Inset-Typen zusammengefasst, die dafür sorgen, dass Inhalte nicht verdeckt werden:

Diese „sicheren“ Inset-Typen schützen Inhalte auf unterschiedliche Weise, basierend auf den zugrunde liegenden Plattform-Insets:

  • Verwenden Sie WindowInsets.safeDrawing, um Inhalte zu schützen, die nicht unter der System-UI gezeichnet werden sollen. Dies ist die häufigste Verwendung von Insets: Sie verhindern, dass Inhalte gezeichnet werden, die von der System-UI verdeckt werden (teilweise oder vollständig).
  • Verwenden Sie WindowInsets.safeGestures, um Inhalte mit Gesten zu schützen. So wird verhindert, dass Systemgesten mit App-Gesten in Konflikt geraten (z. B. für Bottom Sheets, Karussells oder in Spielen).
  • Verwenden Sie WindowInsets.safeContent als Kombination aus WindowInsets.safeDrawing und WindowInsets.safeGestures, um sicherzustellen, dass es keine visuellen oder Gestenüberschneidungen gibt.