En esta lección, se describe cómo ocultar la barra de estado en diferentes versiones de Android. Si ocultas la barra de estado (y, opcionalmente, la barra de navegación), permites que el contenido use más del espacio de visualización, lo que ofrece una experiencia del usuario más envolvente.
En la figura 1, se muestra una app con una barra de estado visible:

Figura 1: Barra de estado visible
En la figura 2, se muestra una app con una barra de estado oculta. Ten en cuenta que la barra de acciones también está oculta. Nunca debes mostrar la barra de acciones sin la barra de estado.

Figura 2: Barra de estado oculta
Cómo ocultar la barra de estado en Android 4.0 y versiones anteriores
Para ocultar la barra de estado en Android 4.0 (API nivel 14) y versiones anteriores, configura marcas WindowManager
. Puedes hacerlo de manera programática o definiendo un tema de actividad en el archivo de manifiesto de tu app. Establecer un tema de actividad en el archivo de manifiesto de tu app es el enfoque preferido si la barra de estado siempre debe permanecer oculta en tu app (aunque, en sentido estricto, puedes anular el tema de manera programática si así lo deseas). Por ejemplo:
<application ... android:theme="@android:style/Theme.Holo.NoActionBar.Fullscreen" > ... </application>
Las ventajas de usar un tema de actividad son las siguientes:
- Es más fácil de mantener y menos propenso a errores que establecer una marca de manera programática.
- Genera transiciones de IU más fluidas, ya que el sistema cuenta con la información necesaria para procesar tu IU antes de crear la instancia de la actividad principal de tu app.
También puedes establecer marcas de WindowManager
de manera programática.
Este enfoque hace que sea más fácil ocultar y mostrar la barra de estado mientras el usuario interactúa con tu app:
Kotlin
class MainActivity : Activity() { override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) // If the Android version is lower than Jellybean, use this call to hide // the status bar. if (Build.VERSION.SDK_INT < 16) { window.setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN) } setContentView(R.layout.activity_main) } ... }
Java
public class MainActivity extends Activity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); // If the Android version is lower than Jellybean, use this call to hide // the status bar. if (Build.VERSION.SDK_INT < 16) { getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN); } setContentView(R.layout.activity_main); } ... }
Cuando defines marcas de WindowManager
(ya sea a través de un tema de actividad o de manera programática), las marcas permanecen vigentes, a menos que tu app las borre.
Puedes usar FLAG_LAYOUT_IN_SCREEN
para definir que el diseño de tu actividad use la misma área de pantalla que está disponible cuando habilitaste FLAG_FULLSCREEN
. De esta manera, evitas que tu contenido cambie de tamaño cuando la barra de estado se oculta y se muestra.
Cómo ocultar la barra de estado en Android 4.1 y versiones posteriores
Puedes ocultar la barra de estado en Android 4.1 (API nivel 6) y versiones posteriores con setSystemUiVisibility()
.
setSystemUiVisibility()
establece marcas de IU en el nivel de vista individual. Estas opciones de configuración se agrupan en el nivel de la ventana. El uso de setSystemUiVisibility()
para establecer marcas de IU te brinda un control más detallado sobre las barras del sistema que con las marcas WindowManager
. Este fragmento oculta la barra de estado:
Kotlin
// Hide the status bar. window.decorView.systemUiVisibility = View.SYSTEM_UI_FLAG_FULLSCREEN // Remember that you should never show the action bar if the // status bar is hidden, so hide that too if necessary. actionBar?.hide()
Java
View decorView = getWindow().getDecorView(); // Hide the status bar. int uiOptions = View.SYSTEM_UI_FLAG_FULLSCREEN; decorView.setSystemUiVisibility(uiOptions); // Remember that you should never show the action bar if the // status bar is hidden, so hide that too if necessary. ActionBar actionBar = getActionBar(); actionBar.hide();
Ten en cuenta lo siguiente:
- Una vez que se hayan borrado las marcas (por ejemplo, si te alejas de la actividad), 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á aonCreate()
, 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 en tu actividad y salga de ella, define marcas de la IU enonResume()
oonWindowFocusChanged()
. - 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 estado
En Android 4.1 y versiones posteriores, puedes configurar el contenido de tus aplicaciones para que aparezca detrás de la barra de estado. De esta manera, el contenido no cambia de tamaño cuando se oculta y se muestra la barra de estado.
Para ello, usa SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN
.
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 (por ejemplo, los controles integrados en una aplicación de Maps) no terminen cubiertas por las barras del sistema. Esto podría hacer que tu app sea inutilizable. En la mayoría de los casos, puedes administrar este valor si agregas el atributo android:fitsSystemWindows
a tu archivo de diseño XML y lo configuras en true
. De esta manera, se ajusta el relleno del ViewGroup
principal a fin de dejar espacio para las ventanas del sistema. Esta medida es suficiente para la mayoría de las aplicaciones.
Sin embargo, en algunos casos, es posible que tengas que modificar el relleno predeterminado para obtener el diseño deseado en tu app. Para controlar directamente cómo se presenta tu contenido en relación con las barras del sistema (que ocupan un espacio conocido como "inserciones de contenido" de la ventana), anula fitSystemWindows(Rect insets)
.
La jerarquía de vistas llama al método fitSystemWindows()
cuando las inserciones de contenido cambian a fin de permitir que la ventana ajuste su contenido en consecuencia. Si anulas este método, puedes controlar las inserciones (y, por lo tanto, el diseño de tu app) como tú quieras.