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.
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:
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 derzeit 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 nachdem, welche Navigationsmethode der Nutzer bevorzugt und wie er mit der Taskleiste interagiert. |
|
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. |
|
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 derzeit ausgeblendet sind, sind die Haupt-Titelleisten-Insets leer, diese Insets jedoch nicht. |
|
Die Vereinigung der Systemleisten-Insets, zu denen die Statusleisten, Navigationsleisten und die Titelleiste gehören. |
|
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. |
|
Die Insets, die den Platz beschreiben, den die Softwaretastatur unten einnimmt. |
|
Die Insets, die den Platz beschreiben, den die Bildschirmtastatur 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“ 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. |
|
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. |
|
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 |
|
Eine Teilmenge der Systemgesten, die immer vom System verarbeitet werden und die nicht über |
|
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, 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.safeContentals Kombination ausWindowInsets.safeDrawingundWindowInsets.safeGestures, um sicherzustellen, dass es keine visuellen oder Gestenüberschneidungen gibt.
Empfehlungen für Sie
- Hinweis: Linktext wird angezeigt, wenn JavaScript deaktiviert ist
- Material-Komponenten und -Layouts
CoordinatorLayoutzu Compose migrieren- Weitere Überlegungen