Randlose Anzeige einrichten

Mit der randlosen Anzeige kann Ihre App ihre Benutzeroberfläche hinter den Systemleisten (Statusleiste, Titelleiste und Navigationsleiste) zeichnen, um eine immersivere Nutzererfahrung zu erzielen. Wenn Sie Geräte mit Android 15 (API-Level 35) oder höher verwenden, ist die randlose Anzeige standardmäßig aktiviert.

Folgen Sie dieser Anleitung, um Inhalte auf allen Android-Versionen korrekt randlos anzuzeigen. Andernfalls zeichnet Ihre App möglicherweise Vollfarben hinter den Systemleisten oder animiert ihre Inhalte nicht synchron mit den Übergängen der Bildschirmtastatur (IME).

1. Randlose Anzeige aktivieren

Wenn Sie die randlose Anzeige auf älteren Android-Versionen aktivieren möchten, rufen Sie enableEdgeToEdge() in der Methode Activity.onCreate() auf:

override fun onCreate(savedInstanceState: Bundle?) {
    super.onCreate(savedInstanceState)
    enableEdgeToEdge()
    ...
}

Standardmäßig macht enableEdgeToEdge() die Systemleisten transparent. Im 3-Tasten-Navigationsmodus wird jedoch ein durchscheinender Schleier auf die Navigationsleiste angewendet, um den Kontrast zu verbessern. Die Farbe der Systemsymbole und des Schleiers passt sich dem hellen oder dunklen Design des Systems an.

2. windowSoftInputMode konfigurieren

Legen Sie android:windowSoftInputMode="adjustResize" im Eintrag AndroidManifest.xml Ihrer Aktivität fest. Mit dieser Einstellung kann Ihre App IME-Einzüge empfangen, sodass Sie das Layout mit Padding anpassen können, wenn die Bildschirmtastatur ein- oder ausgeblendet wird.

<!-- In your AndroidManifest.xml file: -->
<activity
  android:name=".ui.MainActivity"
  android:label="@string/app_name"
  android:windowSoftInputMode="adjustResize"
  android:theme="@style/Theme.MyApplication"
  android:exported="true">
  ...
</activity>

3. Überlappungen mit Einzügen verarbeiten

Sobald die randlose Anzeige aktiviert ist, werden einige Inhalte und UI-Elemente Ihrer App möglicherweise hinter den Systemleisten gezeichnet. Damit kritische oder interaktive Elemente nicht von Systemleisten verdeckt werden oder sich mit Systemgesten überlappen, müssen Sie Einzüge verarbeiten.

Einzüge beschreiben Teile des Bildschirms, die sich mit der System-UI oder Systemgesten überschneiden. Die wichtigsten Arten von Einzügen für die randlose Anzeige sind:

  • Systemleisteneinzüge:Stellen Bereiche dar, in denen Systemleisten angezeigt werden. Verwenden Sie diese, um zu verhindern, dass die Benutzeroberfläche von Systemleisten verdeckt wird.
  • Einzüge für Display-Aussparungen:Stellen Bereiche dar, in denen sich auf dem Gerätebildschirm eine physische Aussparung (z. B. eine Kameranische) befindet.

In Compose können Sie Einzüge mit Linealen, Padding-Modifikatoren oder Modifikatoren für die Einzugsgröße verarbeiten. Eine detaillierte Anleitung finden Sie unter Informationen zu Fenstereinzügen.

Themen für Fortgeschrittene

Berücksichtigen Sie die folgenden Punkte für komplexere Anwendungsfälle der randlosen Anzeige.

Immersiver Modus

Bei einigen Inhalten wie Videos oder Karten ist eine vollständig immersive Darstellung von Vorteil, bei der Systemleisten ausgeblendet werden. Sie können Systemleisten mit WindowInsetsControllerCompat ausblenden:

val windowInsetsController =
    WindowCompat.getInsetsController(window, window.decorView)

// Hide the system bars.
windowInsetsController.hide(WindowInsetsCompat.Type.systemBars())

// Show the system bars.
windowInsetsController.show(WindowInsetsCompat.Type.systemBars()) For example, use either `Scaffold`,

Farben und Symbole der Systemleiste

Wenn Sie die randlose Anzeige verwenden, ist der Hintergrund Ihrer App möglicherweise hinter den Systemleisten sichtbar. Daher müssen Sie möglicherweise die Farben der Systemleistensymbole anpassen, um den Kontrast zu verbessern.

Verwenden Sie WindowInsetsControllerCompat, um die Symbole der Statusleiste hell oder dunkel zu gestalten:

// Set status bar icons to dark
WindowCompat.getInsetsController(window, window.decorView)
    .isAppearanceLightStatusBars = true

// Set status bar icons to light
WindowCompat.getInsetsController(window, window.decorView)
    .isAppearanceLightStatusBars = false

Systemleistenschutz

enableEdgeToEdge() bietet standardmäßig transparente oder durchscheinende Systemleisten. Möglicherweise müssen Sie dies jedoch anpassen. In der Designanleitung für Android-Systemleisten und der Designanleitung für die randlose Anzeige finden Sie Informationen dazu, wann transparente und wann durchscheinende Leisten verwendet werden sollten.

Wenn Sie die 3-Tasten-Navigationsleiste vollständig transparent statt durchscheinend gestalten möchten, können Sie die Kontrasterzwingung deaktivieren:

window.isNavigationBarContrastEnforced = false

Weitere Informationen finden Sie unter Informationen zum Systemleistenschutz.

Dialogfelder

Wenn Sie Dialogfelder im Vollbildmodus randlos anzeigen möchten, rufen Sie WindowCompat.enableEdgeToEdge in der Methode onStart() des Dialogfelds auf:

class MyAlertDialogFragment : DialogFragment() {
    override fun onStart(){
        super.onStart()
        dialog?.window?.let { WindowCompat.enableEdgeToEdge(it) }
    }
    ...
}