Ukryj paski systemowe w trybie pojemnym

Niektóre treści najlepiej oglądać w trybie pełnoekranowym bez żadnych oznaczeń na na pasku stanu i nawigacji. Przykłady: filmy, gry, obraz w galeriach, książkach i prezentacjach. Jest to tzw. trybie pojemnym. Z tej strony dowiesz się, jak zaciekawić użytkowników treści na pełnym ekranie.

Rysunek 1. Przykład trybu pojemnego.

Tryb pojemny pomaga użytkownikom unikać przypadkowego wyjścia podczas gry oraz zapewnia niezwykłe wrażenia podczas oglądania zdjęć, filmów i książek. Zwracaj jednak uwagę na to, jak często użytkownicy przechodzą z aplikacji do aplikacji, aby sprawdzić powiadomienia, do przeprowadzania niezaplanowanych wyszukiwań lub podejmowania innych działań. Ponieważ tryb pojemny powoduje utratę łatwego dostępu do nawigacji w systemie, używaj tylko trybu pojemnego; gdy korzystanie z aplikacji wykracza poza zwykłe korzystanie z dodatkowego ekranu. kosmosu.

Użyj formatu WindowInsetsControllerCompat.hide() aby ukryć paski systemowe oraz WindowInsetsControllerCompat.show() sprowadzić ich z powrotem.

Fragment kodu poniżej pokazuje przykład konfigurowania przycisku do ukrywania i wyświetlania 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 określenia co robią, gdy użytkownik wejdzie z nim w interakcję.

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

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

Określ zachowanie ukrytych pasków systemowych

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