Ausschnitte

Eine Display-Aussparung ist ein Bereich auf einigen Geräten, der in die Displayoberfläche hineinragt. So wird ein randloses Display ermöglicht und gleichzeitig Platz für wichtige Sensoren auf der Vorderseite des Geräts geschaffen.

Beispiel für einen Ausschnitt im Hochformat
Abbildung 1: Beispiel für den Ausschnitt im Porträtmodus
Beispiel für einen Ausschnitt im Querformat
Abbildung 2. Beispiel für einen Ausschnitt im Querformat

Android unterstützt Display-Aussparungen auf Geräten mit Android 9 (API-Level 28) und höher. Gerätehersteller können jedoch auch Displayausschnitte auf Geräten mit Android 8.1 oder niedriger unterstützen.

Auf dieser Seite wird beschrieben, wie Sie Unterstützung für Geräte mit Ausschnitten in Compose implementieren, einschließlich der Verwendung des Ausschnittbereichs, d. h. des Rechtecks auf der Displayoberfläche, das den Ausschnitt enthält und sich von einer Kante zur anderen erstreckt.

Standardfall

Bei Apps, die auf API-Level 34 oder niedriger ausgerichtet sind, oder bei Aktivitäten, bei denen enableEdgeToEdge nicht aufgerufen wird, wird standardmäßig nicht in den Ausschnittbereich gezeichnet, es sei denn, die App zeichnet in eine Systemleiste, die den Displayausschnitt enthält.

Apps, die auf API-Level 35 oder höher ausgerichtet sind, auf Geräten mit Android 15 oder höher oder Aktivitäten, die enableEdgeToEdge aufrufen, werden in den Ausschnittbereich gezeichnet.

Mit anderen Worten: LAYOUT_IN_DISPLAY_CUTOUT_MODE_DEFAULT, LAYOUT_IN_DISPLAY_CUTOUT_MODE_SHORT_EDGES und LAYOUT_IN_DISPLAY_CUTOUT_MODE_NEVER werden als LAYOUT_IN_DISPLAY_CUTOUT_MODE_ALWAYS für nicht schwebende Fenster in Apps interpretiert, die auf API-Level 35 oder höher ausgerichtet sind und auf Geräten mit Android 15 oder höher ausgeführt werden.

Ausschnittinformationen manuell verarbeiten

Sie müssen Ausschnittinformationen verarbeiten, damit der Ausschnittbereich nicht wichtige Texte, Steuerelemente oder interaktive Elemente verdeckt, die eine genaue Berührungserkennung erfordern (die Berührungsempfindlichkeit kann im Ausschnittbereich geringer sein). Bei der Verarbeitung von Aussparungen sollte die Höhe der Statusleiste nicht fest codiert werden, da dies zu überlappenden oder abgeschnittenen Inhalten führen kann. Stattdessen können Sie Ausschnitte auf eine der folgenden Arten verarbeiten:

Für Compose empfehlen wir, displayCutout, safeContent oder safeDrawing zu verwenden, um Ausschnitt-Insets in Ihren Composables zu verarbeiten. So können Sie das Padding für das Display-Cutout bei Bedarf berücksichtigen oder es ignorieren, wenn es nicht erforderlich ist.

Canvas(modifier = Modifier.fillMaxSize().windowInsetsPadding(WindowInsets.displayCutout)) {
    drawRect(Color.Red, style = Stroke(2.dp.toPx()))
}