Certains contenus sont plus agréables à regarder en plein écran, sans aucun indicateur dans la barre d'état ou la barre de navigation. Il peut s'agir, par exemple, de vidéos, de jeux, de galeries d'images, de livres et de diapositives de présentation. C'est ce qu'on appelle le mode immersif. Cette page explique comment susciter davantage l'intérêt des utilisateurs avec du contenu en plein écran.
Le mode immersif permet aux utilisateurs d'éviter de quitter accidentellement un jeu et offre une expérience immersive pour profiter des images, des vidéos et des livres. Toutefois, tenez compte de la fréquence à laquelle les utilisateurs ouvrent et ferment des applications pour consulter des notifications, effectuer des recherches impromptues ou effectuer d'autres actions. Étant donné que le mode immersif empêche les utilisateurs d'accéder facilement à la navigation système, ne l'utilisez que lorsque l'avantage pour l'expérience utilisateur va au-delà de la simple utilisation d'un espace d'écran supplémentaire.
Utilisez WindowInsetsControllerCompat.hide() pour masquer les barres système et WindowInsetsControllerCompat.show() pour les afficher à nouveau.
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); }); }
Vous pouvez éventuellement spécifier le type de barres système à masquer et déterminer leur comportement lorsqu'un utilisateur interagit avec elles.
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().
Utilisez
WindowInsetsCompat.Type.systemBars()pour masquer les deux barres système.Utilisez
WindowInsetsCompat.Type.statusBars()pour masquer uniquement la barre d'état.Utilisez
WindowInsetsCompat.Type.navigationBars()pour masquer uniquement la barre de navigation.
Spécifier le comportement des barres système masquées
Utilisez WindowInsetsControllerCompat.setSystemBarsBehavior() pour spécifier le comportement des barres système masquées lorsque l'utilisateur interagit avec elles.
Utilisez
WindowInsetsControllerCompat.BEHAVIOR_SHOW_BARS_BY_TOUCHpour afficher les barres système masquées lors de toute interaction de l'utilisateur sur l'écran correspondant.Utilisez
WindowInsetsControllerCompat.BEHAVIOR_SHOW_BARS_BY_SWIPEpour afficher les barres système masquées lors de tout geste système, par exemple en balayant l'écran depuis le bord où la barre est masquée.Utilisez
WindowInsetsControllerCompat.BEHAVIOR_SHOW_TRANSIENT_BARS_BY_SWIPEpour afficher temporairement les barres système masquées à l'aide de gestes système, par exemple en balayant l'écran depuis le bord où la barre est masquée. Ces barres système temporaires se superposent au contenu de votre application, peuvent présenter un certain degré de transparence et sont automatiquement masquées après un court délai.