Esta lección describe cómo ocultar la barra de estado en diferentes versiones de Android Ocultar la barra de estado (y, opcionalmente, la barra de navegación) permite que las usan más del espacio de visualización, lo que proporciona una experiencia del usuario más envolvente.
En la figura 1, se muestra una app con una barra de estado visible:
![barras del sistema](https://developer.android.com/static/images/training/status_bar_show.png?authuser=19&hl=es)
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.
![barras del sistema](https://developer.android.com/static/images/training/status_bar_hide.png?authuser=19&hl=es)
Figura 2: Barra de estado oculta
Cómo ocultar la barra de estado en Android 4.0 y versiones anteriores
Puedes configurar para ocultar la barra de estado en Android 4.0 (nivel de API 14) y versiones anteriores
WindowManager
. Puedes hacerlo de forma programática o
configurar un tema de actividad en el archivo de manifiesto de tu app. Configurar un tema de actividad en el archivo
un archivo de manifiesto es el método preferido si la barra de estado siempre debe permanecer
ocultos en tu app (aunque, en sentido estricto, puedes anular el
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.
- Da como resultado transiciones más fluidas de la IU, ya que el sistema tiene la información que necesita para renderizar tu IU antes de crear una instancia de la actividad principal de tu app.
También puedes establecer marcas de WindowManager
de manera programática.
Este enfoque facilita ocultar y mostrar la barra de estado mientras el usuario interactúa con
tu aplicación:
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 configuras marcas WindowManager
(ya sea a través de un tema de actividad o
de manera programática), las marcas seguirán vigentes, a menos que tu app las borre.
Puedes usar
FLAG_LAYOUT_IN_SCREEN
para configurar el diseño de tu actividad de modo que use la misma área de pantalla que está disponible cuando la habilitas
FLAG_FULLSCREEN
Esto evita que tus
el contenido no 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 (nivel de API 16) y versiones posteriores si haces lo siguiente:
usando setSystemUiVisibility()
.
setSystemUiVisibility()
establece las marcas de IU en
el nivel de la vista individual; esta configuración se agrega a nivel de ventana. Usando
setSystemUiVisibility()
para configurar marcas de IU
te brinda un control más detallado sobre las barras del sistema que si usaras
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 de la IU (por ejemplo, al salir 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 un sobre cómo detectar los cambios de visibilidad de la IU para 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 archivo
onCreate()
y el usuario presiona Inicio, las barras del sistema volverá a aparecer. Cuando el usuario vuelve a abrir la actividad,onCreate()
. no se llamará, por lo que las barras del sistema permanecerán visibles. Si quieres que la IU del sistema cambie a persistan a medida que el usuario entre y salga de tu actividad, configura marcas de la IU enonResume()
oonWindowFocusChanged()
. - El método
setSystemUiVisibility()
solo tiene efecto si la vista desde la que lo llamas está visible. - Si te alejas de la vista, se generan marcas
se estableció con
setSystemUiVisibility()
que se borrará.
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 tu aplicación para que aparezca
la barra de estado, de modo que el contenido no cambie de tamaño cuando se oculta y se muestra la barra de estado.
Para hacerlo, usa
SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN
También es posible que debas usar
SYSTEM_UI_FLAG_LAYOUT_STABLE
para que tu app mantenga una
y un diseño estable.
Cuando usas este enfoque, es tu responsabilidad garantizar que las partes críticas
de la IU de tu app (por ejemplo, los controles integrados en una aplicación de Maps) no terminen
se cubren con las barras del sistema. Esto podría hacer que tu app sea inutilizable. En la mayoría de los casos, puedes
Para controlar esto, agrega el atributo android:fitsSystemWindows
a tu archivo de diseño XML, configurado como
true
De esta manera, se ajusta el padding del elemento superior ViewGroup
.
para dejar espacio para las ventanas del sistema. Esta medida es suficiente para la mayoría de las aplicaciones.
Sin embargo, en algunos casos, puede ser necesario
modificar el padding predeterminado para obtener
para tu app. Para manipular directamente cómo tus
el contenido se expone en relación con las barras del sistema (que ocupan un espacio conocido como
"inserciones de contenido"), anulará fitSystemWindows(Rect insets)
.
El método fitSystemWindows()
llama al método
de vista cuando las inserciones de contenido cambian para permitir que la ventana
ajustar su contenido en consecuencia. Cuando se anula este método, puedes controlar
las inserciones (y, por lo tanto, el diseño de tu app) como quieras.