Saltar al contenido

Cambiar el color de la barra de estado con AppCompat ActionBarActivity

Solución:

No estoy seguro de entender el problema.

Si desea cambiar el color de la barra de estado mediante programación (y siempre que el dispositivo tenga Android 5.0), entonces pueden usar Window.setStatusBarColor(). No debería haber ninguna diferencia si la actividad se deriva de Activity o ActionBarActivity.

Intenta hacer:

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
    Window window = getWindow();
    window.addFlags(WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS);
    window.setStatusBarColor(Color.BLUE);
}

Solo probé esto con ActionBarActivity y funciona bien.


Nota: Configurar el FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS marcar programáticamente no es necesario si su values-v21 El archivo de estilos ya lo tiene configurado, a través de:

    <item name="android:windowDrawsSystemBarBackgrounds">true</item>

Hay varias formas de cambiar el color de la barra de estado.

1) Utilizando styles.xml. Puede usar el atributo android: statusBarColor para hacer esto de una manera fácil pero estática.

Nota: también puede utilizar este atributo con el tema Material.

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <style name="AppTheme" parent="AppTheme.Base">
        <item name="android:statusBarColor">@android:color/transparent</item>
    </style>
</resources>

2) Puede hacerlo dinámicamente usando el método setStatusBarColor (int) en la clase Window. Pero recuerde que este método solo está disponible para API 21 o superior. Así que asegúrese de verificar eso, o su aplicación seguramente fallará en dispositivos inferiores.

A continuación se muestra un ejemplo práctico de este método.

if (Build.VERSION.SDK_INT >= 21) {
            Window window = getWindow();
            window.addFlags(WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS);
            window.clearFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS);
            window.setStatusBarColor(getResources().getColor(R.color.primaryDark));
}

donde primaryDark es el tinte 700 del color primario que estoy usando en mi aplicación. Puede definir este color en el archivo colors.xml.

Pruébelo y avíseme si tiene alguna pregunta. Espero eso ayude.

No creo que el color de la barra de estado se haya implementado todavía en AppCompat. Estos son los atributos que están disponibles:

    <!-- ============= -->
    <!-- Color palette -->
    <!-- ============= -->

    <!-- The primary branding color for the app. By default, this is the color applied to the
         action bar background. -->
    <attr name="colorPrimary" format="color" />

    <!-- Dark variant of the primary branding color. By default, this is the color applied to
         the status bar (via statusBarColor) and navigation bar (via navigationBarColor). -->
    <attr name="colorPrimaryDark" format="color" />

    <!-- Bright complement to the primary branding color. By default, this is the color applied
         to framework controls (via colorControlActivated). -->
    <attr name="colorAccent" format="color" />

    <!-- The color applied to framework controls in their normal state. -->
    <attr name="colorControlNormal" format="color" />

    <!-- The color applied to framework controls in their activated (ex. checked) state. -->
    <attr name="colorControlActivated" format="color" />

    <!-- The color applied to framework control highlights (ex. ripples, list selectors). -->
    <attr name="colorControlHighlight" format="color" />

    <!-- The color applied to framework buttons in their normal state. -->
    <attr name="colorButtonNormal" format="color" />

    <!-- The color applied to framework switch thumbs in their normal state. -->
    <attr name="colorSwitchThumbNormal" format="color" />

(De sdk extras android support v7 appcompat res values ​​ attrs.xml)

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *