Cómo ocultar la barra de estado

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

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

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 en onResume() o onWindowFocusChanged().
  • 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.