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 czy pasku nawigacyjnym. Mogą to być filmy, gry, galerie obrazów, książki i slajdy do prezentacji. Jest to tzw. tryb pojemny. Ta strona pokazuje, jak możesz zaangażować użytkowników, wyświetlając treści na pełnym ekranie.

Rysunek 1. Przykład trybu pojemnego.

Tryb pojemny pomaga użytkownikom uniknąć przypadkowego zamknięcia gry i zapewnia niezwykłe wrażenia podczas korzystania z obrazów, filmów i książek. Pamiętaj jednak, jak często użytkownicy wracają do aplikacji i wychodzą z nich, aby sprawdzić powiadomienia, przeprowadzić niezaplanowane wyszukiwanie lub wykonać inne działania. W trybie pojemnym użytkownicy tracą łatwy dostęp do nawigacji w systemie, dlatego używaj trybu pojemnego tylko wtedy, gdy korzyści dla użytkowników wykraczają poza dodatkowe miejsce na ekranie.

Kliknij WindowInsetsControllerCompat.hide(), aby ukryć paski systemu, i WindowInsetsControllerCompat.show(), aby je przywrócić.

Poniższy fragment kodu pokazuje przykład konfigurowania przycisku do ukrywania i wyświetlania pasków systemowych.

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);
    });
}

Opcjonalnie możesz określić typ pasków systemowych, które mają być ukryte, oraz określić ich zachowanie, gdy użytkownik wejdzie z nimi w interakcję.

Określ, które paski systemowe mają być ukryte

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

Określ zachowanie ukrytych pasków systemu

Użyj właściwości WindowInsetsControllerCompat.setSystemBarsBehavior(), aby określić, jak ukryte paski systemu zachowują się, gdy użytkownik wchodzi z nimi w interakcję.