Cómo ocultar la barra de navegación

En esta lección, se describe cómo ocultar la barra de navegación, que se introdujo en Android 4.0 (API nivel 14).

Aunque esta lección se enfoca en cómo ocultar la barra de navegación, debes diseñar tu app para que oculte la barra de estado al mismo tiempo, según se describe en Cómo ocultar la barra de estado. Si ocultas las barras de navegación y estado (pero el usuario puede acceder a ellas fácilmente), permites que el contenido use todo el espacio de visualización, lo que ofrece una experiencia del usuario más envolvente.

barras del sistema

Figura 1: Barra de navegación

Cómo ocultar la barra de navegación

Para ocultar la barra de navegación, usa la marca SYSTEM_UI_FLAG_HIDE_NAVIGATION. En este fragmento, se oculta tanto la barra de navegación como la barra de estado.

Kotlin

    window.decorView.apply {
        // Hide both the navigation bar and the status bar.
        // SYSTEM_UI_FLAG_FULLSCREEN is only available on Android 4.1 and higher, but as
        // a general rule, you should design your app to hide the status bar whenever you
        // hide the navigation bar.
        systemUiVisibility = View.SYSTEM_UI_FLAG_HIDE_NAVIGATION or View.SYSTEM_UI_FLAG_FULLSCREEN
    }
    

Java

    View decorView = getWindow().getDecorView();
    // Hide both the navigation bar and the status bar.
    // SYSTEM_UI_FLAG_FULLSCREEN is only available on Android 4.1 and higher, but as
    // a general rule, you should design your app to hide the status bar whenever you
    // hide the navigation bar.
    int uiOptions = View.SYSTEM_UI_FLAG_HIDE_NAVIGATION
                  | View.SYSTEM_UI_FLAG_FULLSCREEN;
    decorView.setSystemUiVisibility(uiOptions);
    

Ten en cuenta lo siguiente:

  • Con este enfoque, si tocas en cualquier lugar de la pantalla, la barra de navegación y la barra de estado vuelven a aparecer y permanecen visibles. La interacción del usuario provoca que se borren las marcas.
  • Una vez que se hayan borrado las marcas, tu app debe restablecerlas si deseas volver a ocultar las barras. Consulta Cómo responder a los cambios de visibilidad de la IU para acceder a información sobre cómo escuchar los cambios de visibilidad de la IU de manera que tu app pueda responder en consecuencia.
  • El lugar en el que estableces las marcas de la IU hace la diferencia. Si ocultas las barras del sistema en el método onCreate() de tu actividad y el usuario presiona Inicio, las barras del sistema volverán a aparecer. Cuando el usuario vuelva a abrir la actividad, no se llamará a onCreate(), por lo que las barras del sistema permanecerán visibles. Si deseas que los cambios en la IU del sistema persistan aunque el usuario entre a tu actividad y salga de ella, define marcas de la IU en onResume() o onWindowFocusChanged().
  • El método setSystemUiVisibility() solo tiene efecto si la vista desde la que lo llamas está visible.
  • Si navegas fuera de la vista, se borrarán las marcas configuradas con setSystemUiVisibility().

Cómo hacer que el contenido aparezca detrás de la barra de navegación

En Android 4.1 y versiones posteriores, puedes configurar el contenido de tu aplicación para que aparezca detrás de la barra de navegación. De esta manera, el contenido no cambia de tamaño cuando se oculta y se muestra la barra de navegación. Para ello, usa SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION. Es posible que también tengas que usar SYSTEM_UI_FLAG_LAYOUT_STABLE para que tu app mantenga un diseño estable.

Cuando usas este enfoque, es tu responsabilidad garantizar que partes críticas de la IU de tu app no terminen cubiertas por las barras del sistema. Para obtener más información sobre este tema, consulta la lección Cómo ocultar la barra de estado.