Auf einigen Geräten ist eine Display-Aussparung ein Bereich, der in die Displayoberfläche hinausgeht. Es ermöglicht eine randlose Bedienung und bietet Platz für wichtige Sensoren an der Vorderseite des Geräts.
Android unterstützt Display-Aussparungen auf Geräten mit Android 9 (API-Level 28) und höher. Gerätehersteller können jedoch auch Display-Aussparungen auf Geräten mit Android 8.1 oder niedriger unterstützen.
Auf dieser Seite wird beschrieben, wie Sie die Unterstützung für Geräte mit Aussparungen in Composer implementieren und mit dem Ausschnittbereich arbeiten, d. h. mit dem randlosen Rechteck auf der Displayoberfläche, das die Aussparung enthält.
Standard-Groß-/Kleinschreibung
Standardmäßig sind Display-Aussparungen in den Fenstereinfügungen enthalten. Aus diesem Grund zeichnet deine App nicht die Display-Aussparungen, wenn du der Anleitung zum randvollen Gestalten der App folgst.
Wenn Sie beispielsweise Modifier.windowInsetsPadding(WindowInsets.safeContent)
oder Modifier.windowInsetsPadding(WindowInsets.safeDrawing)
verwenden, zeichnet Ihre App automatisch nicht die Bereiche, in denen ein Ausschnitt platziert ist.
WindowInsets.safeContent
und WindowInsets.safeDrawing
enthalten beide Informationen zum Displayausschnitt und werden nicht an der Stelle gezeichnet, an der sich eine Geräteaussparung befindet.
override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) WindowCompat.setDecorFitsSystemWindows(window, false) setContent { Box(Modifier.windowInsetsPadding(WindowInsets.safeContent)) { // Any composable inside here will avoid drawing behind cutouts } } }
Um dieses Verhalten weiter anzupassen, müssen Sie die Aussparungsinformationen selbst verarbeiten.
Informationen zu Ausschnitten manuell verarbeiten
Für den Umgang mit Aussparungen gibt es folgende Möglichkeiten:
WindowInsets.displayCutout
wird verwendetEinstellung im Designmanifest mit
android:windowLayoutInDisplayCutoutMode
Programmatisch die Option für eine
Window
mitwindow.attributes.layoutInDisplayCutoutMode
festlegenMit
LocalView.current.rootWindowInsets.displayCutout
auf das AussparungsobjektPath
zugreifen
Es wird empfohlen, windowLayoutInDisplayCutoutMode
im Gesamtdesign auf default
zu setzen und dann WindowInsets.displayCutout
zu verwenden, um die Einfügungen in Ihren zusammensetzbaren Funktionen zu verarbeiten:
Canvas(modifier = Modifier.fillMaxSize().windowInsetsPadding(WindowInsets.displayCutout)) { drawRect(Color.Red, style = Stroke(2.dp.toPx())) }
Auf diese Weise können Sie das displayCutout
-Padding bei Bedarf berücksichtigen oder ignorieren, wo es nicht erforderlich ist.
Alternativ können Sie dieselben Einstellungen anwenden, die in der Dokumentation zum Cutout beschrieben sind. Dazu legen Sie entweder das Aktivitätsthema android:windowLayoutInDisplayCutoutMode
auf eine andere Option oder das Fensterattribut mit window.attributes.layoutInDisplayCutoutMode =
LAYOUT_IN_DISPLAY_CUTOUT_MODE_DEFAULT
fest. Der Ausschneidemodus wird dann jedoch auf die gesamte Aktivität angewendet und kann nicht für jede einzelne zusammensetzbare Funktion gesteuert werden.
Verwenden Sie WindowInset.displayCutout
, um die Display-Aussparung bei bestimmten zusammensetzbaren Funktionen, bei anderen jedoch nicht zu berücksichtigen. Mit dieser API können Sie bei Bedarf auf die Ausschnittinformationen zugreifen.
Best Practices
Berücksichtigen Sie bei der Arbeit mit Display-Aussparungen Folgendes:
- Achten Sie auf die Platzierung wichtiger Elemente der Benutzeroberfläche. Achten Sie darauf, dass wichtige Texte, Steuerelemente oder andere Informationen nicht durch den Aussparungsbereich verdeckt werden.
- Platzieren oder erweitern Sie keine interaktiven Elemente, die eine detaillierte Erkennung erfordern, im Aussparungsbereich. Im Aussparungsbereich ist die Berührungsempfindlichkeit möglicherweise geringer.
- Bei Beachtung der randlosen Anleitung finden Sie in den Einsätzen
safeDrawing
undsafeContent
Informationen zur Aussparung. - Verwende nach Möglichkeit
Modifier.windowInsetsPadding(WindowInsets.safeDrawing)
, um den passenden Abstand für deine Inhalte festzulegen. Vermeiden Sie eine Hartcodierung der Höhe der Statusleiste, da dies zu Überlappungen oder abgeschnittenen Inhalten führen kann.
Mit Aussparungen testen, wie deine Inhalte gerendert werden
Testen Sie alle Bildschirme und Funktionen Ihrer App. Testen Sie dies nach Möglichkeit auf Geräten mit unterschiedlichen Aussparungen. Wenn Sie kein Gerät mit Aussparung haben, können Sie gängige Konfigurationen für die Aussparung auf jedem Gerät oder Emulator mit Android 9 oder höher simulieren:
- Aktivieren Sie Entwickleroptionen.
- Scrollen Sie auf dem Bildschirm Entwickleroptionen nach unten zum Abschnitt Zeichnung und wählen Sie Anzeige mit Ausschnitt simulieren aus.
- Wählen Sie die Art der Aussparung aus.
Empfehlungen für dich
- Hinweis: Der Linktext wird angezeigt, wenn JavaScript deaktiviert ist.
- Fenstereinfügungen in Compose
- Grafikmodifikatoren
- Absatzstil formatieren