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 ani pasku nawigacji. Mogą to być na przykład filmy, gry, galerie zdjęć, książki i slajdy prezentacji. Jest to tak zwany tryb pełnoekranowy. Ta strona pokazuje, jak możesz bardziej zaangażować użytkowników, wyświetlając treści na pełnym ekranie.

Rysunek 1. Przykład trybu imersji.

Tryb pełnoekranowy pomaga użytkownikom uniknąć przypadkowego zamknięcia gry oraz zapewnia lepsze wrażenia podczas oglądania obrazów, filmów i książek. Pamiętaj jednak, że użytkownicy często przełączają się między aplikacjami, aby sprawdzać powiadomienia, prowadzić spontaniczne wyszukiwania lub wykonywać inne czynności. Tryb pełnoekranowy powoduje, że użytkownicy tracą łatwy dostęp do nawigacji systemowej, dlatego używaj go tylko wtedy, gdy korzyści dla użytkownika wykraczają poza wykorzystanie dodatkowej przestrzeni na ekranie.

Użyj WindowInsetsControllerCompat.hide(), aby ukryć paski systemowe, i WindowInsetsControllerCompat.show(), aby je przywrócić.

Fragment kodu poniżej pokazuje przykład konfigurowania przycisku do ukrywania i wyświetlania słupkó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.
    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ć, jakie paski systemowe chcesz ukryć, i jak mają się zachowywać, gdy użytkownik z nimi wejdzie w interakcję.

Określanie pasków systemu, które mają być ukryte

Aby określić, które paski systemu mają być ukryte, prześlij jeden z tych parametrów do WindowInsetsControllerCompat.hide().

Określ zachowanie ukrytych pasków systemu

Użyj elementu WindowInsetsControllerCompat.setSystemBarsBehavior(), aby określić zachowanie ukrytych pasków systemu podczas interakcji z nimi przez użytkownika.