Masquer les barres système pour le mode immersif

Il est préférable d'utiliser certains contenus en plein écran sans aucun indicateur sur la la barre d'état ou la barre de navigation. (vidéos, jeux, images, etc.). des galeries, des livres et des diapositives de présentation. C'est ce que l'on appelle mode immersif. Cette page vous montre comment renforcer l'engagement des utilisateurs avec le contenu en plein écran.

Figure 1 : Exemple de mode immersif.

Le mode immersif permet aux utilisateurs d'éviter les sorties accidentelles pendant un jeu et offre une expérience immersive pour profiter d'images, de vidéos et de livres. Toutefois, tenez compte de la fréquence à laquelle les utilisateurs accèdent à une application ou en sortent pour consulter les notifications. pour effectuer des recherches impromptues ou pour effectuer d'autres actions. Parce que le mode immersif les utilisateurs ne peuvent plus accéder facilement à la navigation système et n'utilisent que le mode immersif. lorsque l'avantage de l'expérience utilisateur va au-delà du simple fait d'utiliser un écran supplémentaire. l'espace de stockage.

Utiliser WindowInsetsControllerCompat.hide() pour masquer les barres système et WindowInsetsControllerCompat.show() pour les ramener.

L'extrait de code suivant montre comment configurer un bouton pour masquer et afficher les barres système.

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

Si vous le souhaitez, vous pouvez spécifier le type des barres système à masquer et à déterminer leur comportement lorsqu'un utilisateur interagit avec eux.

Spécifier les barres système à masquer

Pour spécifier le type de barres système à masquer, transmettez l'un des paramètres suivants à WindowInsetsControllerCompat.hide().

Spécifier le comportement des barres système masquées

Utiliser WindowInsetsControllerCompat.setSystemBarsBehavior() pour spécifier le comportement des barres système masquées lorsque l'utilisateur interagit avec elles.