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 deine App im richtigen Bereich gezeichnet wird und die UI nicht durch die System-UI verdeckt wird.
Unter Android 14 (API-Level 34) und niedriger wird die UI deiner App standardmäßig nicht unter den Systemleisten und Display-Aussparungen gezeichnet.
Unter Android 15 (API-Level 35) und höher wird die 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 deiner App, den verfügbaren Fensterbereich voll auszunutzen.
Das Anzeigen von Inhalten hinter der System-UI wird als randlos zeichnen bezeichnet. Auf dieser Seite erfährst du mehr über die verschiedenen Arten von Insets, wie du randlos zeichnest und wie du die Inset-APIs verwenden kannst, um deine UI zu animieren und dafür zu sorgen, dass die Inhalte deiner App nicht durch System-UI-Elemente verdeckt werden.
Grundlagen zu Insets
Wenn eine App randlos zeichnet, musst du 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 zur Position werden mit Insets angegeben.
Jeder Teil der System-UI hat einen entsprechenden Inset-Typ, der seine Größe und Position beschreibt. Statusleisten-Insets geben beispielsweise Größe und Position der Statusleiste an, während Navigationsleisten-Insets 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:
Die Insets, die die Statusleisten beschreiben. Das sind die oberen System-UI-Leisten, die Benachrichtigungssymbole und andere Anzeigen enthalten. |
|
Die Statusleisten-Insets für den Fall, dass sie sichtbar sind. Wenn die Statusleisten ausgeblendet sind (weil der immersive Vollbildmodus aktiviert ist), sind die Haupt-Statusleisten-Insets leer, diese Insets jedoch nicht. |
|
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 nach der bevorzugten Navigationsmethode des Nutzers und der Interaktion mit der Taskleiste. |
|
Die Navigationsleisten-Insets für den Fall, dass sie sichtbar sind. Wenn die Navigationsleisten ausgeblendet sind (weil der immersive Vollbildmodus aktiviert ist), sind die Haupt-Navigationsleisten-Insets leer, diese Insets jedoch nicht. |
|
Das Inset, das die Fensterdekoration der System-UI beschreibt, wenn sie sich in einem Freiformfenster befindet, z. B. die obere Titelleiste. |
|
Die Titelleisten-Insets für den Fall, dass sie sichtbar sind. Wenn die Titelleisten ausgeblendet sind, sind die Haupt-Titelleisten-Insets leer, diese Insets jedoch nicht. |
|
Die Vereinigung der Systemleisten-Insets, einschließlich der Statusleisten, Navigationsleisten und Titelleiste. |
|
Die Systemleisten-Insets für den Fall, dass sie sichtbar sind. Wenn die Systemleisten ausgeblendet sind (weil der immersive Vollbildmodus aktiviert ist), sind die Haupt-Systemleisten-Insets leer, diese Insets jedoch nicht. |
|
Die Insets, die den Platz beschreiben, den die Softwaretastatur unten einnimmt. |
|
Die Insets, die den Platz beschreiben, den die Softwaretastatur vor der aktuellen Tastaturanimation eingenommen hat. |
|
Die Insets, die den Platz beschreiben, den die Softwaretastatur nach der aktuellen Tastaturanimation einnehmen wird. |
|
Ein Inset-Typ, der detailliertere Informationen zur Navigations-UI enthält und angibt, wie viel Platz für „Taps“ vom System und nicht von der App verarbeitet wird. Bei transparenten Navigationsleisten mit Bedienung über Gesten können einige App-Elemente über die System-Navigations-UI angetippt werden. |
|
Die Insets für angetippte Elemente für den Fall, dass sie sichtbar sind. Wenn die angetippten Elemente ausgeblendet sind (weil der immersive Vollbildmodus aktiviert ist), sind die Haupt-Insets für angetippte Elemente leer, diese Insets jedoch nicht. |
|
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 mit |
|
Eine Teilmenge der Systemgesten, die immer vom System verarbeitet werden und für die die Verarbeitung nicht mit |
|
Die Insets, die den Abstand darstellen, der erforderlich ist, um Überschneidungen mit einer Display-Aussparung (Notch oder Loch) zu vermeiden. |
|
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, je nach den zugrunde liegenden Plattform-Insets:
- Verwende
WindowInsets.safeDrawing, um Inhalte zu schützen, die nicht unter der System-UI gezeichnet werden sollen. Dies ist die häufigste Verwendung von Insets: zu verhindern, dass Inhalte gezeichnet werden, die von der System-UI verdeckt werden (teilweise oder vollständig). - Verwende
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). - Verwende
WindowInsets.safeContentals Kombination ausWindowInsets.safeDrawingundWindowInsets.safeGestures, um sicherzustellen, dass es keine visuellen oder Touchgestenüberschneidungen gibt.
Empfehlungen für Sie
- Hinweis: Linktext wird angezeigt, wenn JavaScript deaktiviert ist
- Material-Komponenten und -Layouts
CoordinatorLayoutzu Compose migrieren- Weitere Überlegungen