Systemleisten für immersiven Modus ausblenden

Manche Inhalte lassen sich am besten im Vollbildmodus ohne Indikatoren in der Status- oder Navigationsleiste darstellen. Beispiele sind Videos, Spiele, Bildergalerien, Bücher und Präsentationsfolien. Dies wird als immersiver Modus bezeichnet. Auf dieser Seite erfährst du, wie du Nutzer mit Inhalten im Vollbildmodus stärker ansprechen kannst.

Abbildung 1: Beispiel für den immersiven Modus

Der immersive Modus verhindert ein versehentliches Beenden während eines Spiels und bietet ein immersives Erlebnis für Bilder, Videos und Bücher. Bedenken Sie jedoch, wie oft Nutzer Apps aufrufen und wieder verlassen, um Benachrichtigungen zu lesen, spontan nach etwas zu suchen oder andere Aktionen auszuführen. Da der immersive Modus dazu führt, dass Nutzer keinen einfachen Zugriff auf die Systemnavigation haben, sollten Sie ihn nur verwenden, wenn die Nutzererfahrung über die reine Nutzung von zusätzlichem Bildschirmbereich hinausgeht.

Verwenden Sie WindowInsetsControllerCompat.hide(), um die Systemleisten auszublenden, und WindowInsetsControllerCompat.show(), um sie wieder einzublenden.

Das folgende Snippet zeigt ein Beispiel für das Konfigurieren einer Schaltfläche zum Ein- und Ausblenden der Systemleisten.

Kotlin

override fun onCreate(savedInstanceState: Bundle?) {
    ...

    val windowInsetsController =
        WindowCompat.getInsetsController(window, window.decorView)
    // Configure the behavior of the hidden system bars.
    windowInsetsController.systemBarsBehavior =
        WindowInsetsControllerCompat.BEHAVIOR_SHOW_TRANSIENT_BARS_BY_SWIPE

    // Add a listener to update the behavior of the toggle fullscreen button when
    // the system bars are hidden or revealed.
    window.decorView.setOnApplyWindowInsetsListener { view, windowInsets ->
        // You can hide the caption bar even when the other system bars are visible.
        // To account for this, explicitly check the visibility of navigationBars()
        // and statusBars() rather than checking the visibility of systemBars().
        if (windowInsets.isVisible(WindowInsetsCompat.Type.navigationBars())
            || windowInsets.isVisible(WindowInsetsCompat.Type.statusBars())) {
            binding.toggleFullscreenButton.setOnClickListener {
                // Hide both the status bar and the navigation bar.
                windowInsetsController.hide(WindowInsetsCompat.Type.systemBars())
            }
        } else {
            binding.toggleFullscreenButton.setOnClickListener {
                // Show both the status bar and the navigation bar.
                windowInsetsController.show(WindowInsetsCompat.Type.systemBars())
            }
        }
        view.onApplyWindowInsets(windowInsets)
    }
}

Java

@Override
protected void onCreate(Bundle savedInstanceState) {
    ...

    WindowInsetsControllerCompat windowInsetsController =
            WindowCompat.getInsetsController(getWindow(), getWindow().getDecorView());
    // Configure the behavior of the hidden system bars.
    windowInsetsController.setSystemBarsBehavior(
            WindowInsetsControllerCompat.BEHAVIOR_SHOW_TRANSIENT_BARS_BY_SWIPE
    );

    // Add a listener to update the behavior of the toggle fullscreen button when
    // the system bars are hidden or revealed.
    getWindow().getDecorView().setOnApplyWindowInsetsListener((view, windowInsets) -> {
        // You can hide the caption bar even when the other system bars are visible.
        // To account for this, explicitly check the visibility of navigationBars()
        // and statusBars() rather than checking the visibility of systemBars().
        if (windowInsets.isVisible(WindowInsetsCompat.Type.navigationBars())
                || windowInsets.isVisible(WindowInsetsCompat.Type.statusBars())) {
            binding.toggleFullscreenButton.setOnClickListener(v -> {
                // Hide both the status bar and the navigation bar.
                windowInsetsController.hide(WindowInsetsCompat.Type.systemBars());
            });
        } else {
            binding.toggleFullscreenButton.setOnClickListener(v -> {
                // Show both the status bar and the navigation bar.
                windowInsetsController.show(WindowInsetsCompat.Type.systemBars());
            });
        }
        return view.onApplyWindowInsets(windowInsets);
    });
}

Optional können Sie den Typ der Systemleisten angeben, um deren Verhalten auszublenden und zu bestimmen, wenn ein Nutzer mit ihnen interagiert.

Festlegen, welche Systemleisten ausgeblendet werden sollen

Übergeben Sie einen der folgenden Parameter an WindowInsetsControllerCompat.hide(), um anzugeben, welche Art von Systemleisten ausgeblendet werden sollen.

Verhalten von ausgeblendeten Systemleisten angeben

Mit WindowInsetsControllerCompat.setSystemBarsBehavior() können Sie festlegen, wie sich ausgeblendete Systemleisten verhalten, wenn der Nutzer mit ihnen interagiert.