Ukryj paski systemowe w trybie pojemnym

Niektóre treści najlepiej oglądać na pełnym ekranie bez żadnych wskaźników na pasku stanu lub pasku nawigacyjnym. Dotyczy to np. filmów, gier, galerii zdjęć, książek i slajdów prezentacji. Jest to tzw. tryb immersyjny. Na tej stronie dowiesz się, jak zwiększyć zaangażowanie użytkowników w treści wyświetlane na pełnym ekranie.

Rysunek 1. Przykład trybu immersyjnego.

Tryb immersyjny pomaga użytkownikom uniknąć przypadkowego wyjścia z gry i zapewnia wciągające wrażenia podczas oglądania zdjęć, filmów i czytania książek. Pamiętaj jednak, jak często użytkownicy przełączają się między aplikacjami, aby sprawdzić powiadomienia, przeprowadzić szybkie wyszukiwanie lub wykonać inne działania. Tryb immersyjny utrudnia użytkownikom dostęp do nawigacji systemowej, dlatego używaj go tylko wtedy, gdy korzyści dla użytkownika wykraczają poza zwykłe wykorzystanie dodatkowej przestrzeni na ekranie.

Aby ukryć paski systemowe, użyj funkcji WindowInsetsControllerCompat.hide() , a aby je przywrócić, użyj funkcji WindowInsetsControllerCompat.show().

Poniższy fragment kodu pokazuje, jak skonfigurować przycisk, aby ukrywać i wyświetlać paski systemowe.

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.
    ViewCompat.setOnApplyWindowInsetsListener(window.decorView) { 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())
            }
        }
        ViewCompat.onApplyWindowInsets(view, 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.
    ViewCompat.setOnApplyWindowInsetsListener(
        getWindow().getDecorView(),
        (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 ViewCompat.onApplyWindowInsets(view, windowInsets);
    });
}

Opcjonalnie możesz określić typ pasków systemowych do ukrycia i ich zachowanie, gdy użytkownik wchodzi z nimi w interakcję.

Określanie pasków systemowych do ukrycia

Aby określić typ pasków systemowych do ukrycia, przekaż jeden z tych parametrów do funkcji WindowInsetsControllerCompat.hide().

Określanie zachowania ukrytych pasków systemowych

Użyj WindowInsetsControllerCompat.setSystemBarsBehavior() , aby określić, jak ukryte paski systemowe mają się zachowywać, gdy użytkownik wchodzi z nimi w interakcję.