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 (nivel de API 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, como se describe en Cómo ocultar la barra de estado. Si ocultas las barras de estado y navegación (y se mantiene el acceso a ellas fácilmente), permites que el contenido use todo el espacio de visualización, lo que brinda 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. Este fragmento 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 cualquier parte de la pantalla, la barra de navegación (y la barra de estado) vuelve a aparecer y permanece visible. La interacción del usuario hace 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 ver un análisis 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 a medida que el usuario entre en tu actividad y salga de ella, establece las 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 sales de la vista, se borrarán las marcas establecidas 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 modo que el contenido no cambie de tamaño cuando se oculte y se muestre la barra de navegación. Para ello, usa SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION. Es posible que también debas usar SYSTEM_UI_FLAG_LAYOUT_STABLE para ayudar a 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.