Color de los iconos de la barra de estado de Android


131

Me preguntaba si es posible cambiar el color de los iconos de la barra de estado ( no el color de la barra de estado colorPrimaryDark). ingrese la descripción de la imagen aquí Digamos que quiero esta barra de estado con:
<item name="colorPrimaryDark">@android:color/white</item>

y los íconos en negro, ¿es posible?

Gracias.

EDITAR:

Nuevo en la vista previa del desarrollador M: windowLightStatusBar. Activar esto en su tema le dice al sistema que use un primer plano oscuro, útil para barras de estado de colores más claros. Tenga en cuenta que la vista previa M parece tener un error en el que los iconos de notificación permanecen en blanco, mientras que los iconos de estado del sistema cambian correctamente a negro semitransparente.

de: Roman Nurik publicación de Google+ ingrese la descripción de la imagen aquí

Respuestas:


24

No desde Lollipop. A partir de Android 5.0, las pautas dicen:

Los íconos de notificación deben ser completamente blancos.

Incluso si no lo son, el sistema solo considerará el canal alfa de su icono, haciéndolos blancos

Solución alterna

La única forma de tener un ícono de color en Lollipop es reducir los targetSdkVersionvalores a <21, pero creo que sería mejor seguir las pautas y usar solo íconos blancos.

Sin embargo, si todavía decide que desea iconos de colores, puede usar el método DrawableCompat.setTint de la nueva biblioteca de soporte v4.


3
Hice una búsqueda en Google y no pude encontrar una forma adecuada de hacerlo, pero si las pautas de Android dicen que los iconos deben ser blancos, blanco es :) ¡Gracias!
GuilhE

11
Tiene que haber una mejor solución para esto. Varias aplicaciones comerciales están usando colores. Este es un movimiento de diseño horriblemente idiota de Google. ¿Qué pensaban de nuevo, si es que lo hacían?
not2qubit

Si nos fijamos en la aplicación de noticias de Google, no tienen iconos de barra de estado blancos: play.google.com/store/apps/…
Adam Hurwitz

66
<item name="android:windowLightStatusBar">true</item>trabajó para mi.
Adam Hurwitz el

Me pregunto por qué la aplicación Gmail (lanzada en 2019-04) colorea la barra de estado en blanco y los íconos / texto en gris oscuro.
Daniel F

201

Sí, es posible cambiarlo a gris (sin colores personalizados), pero esto solo funciona desde API 23 y superior, solo necesita agregar esto en sus valores-v23 / styles.xml

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

ingrese la descripción de la imagen aquí


2
pero el color de los iconos de los elementos del menú sigue siendo blanco ¿cómo cambiar el color de los iconos de los elementos del menú a negro?
Mateen Chaudhry

107

@eOnOe ha respondido cómo podemos cambiar el tono de la barra de estado a través de xml. Pero también podemos cambiarlo dinámicamente en el código:

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
    View decor = getWindow().getDecorView();
    if (shouldChangeStatusBarTintToDark) {
        decor.setSystemUiVisibility(View.SYSTEM_UI_FLAG_LIGHT_STATUS_BAR);
    } else {
        // We want to change tint color to white again.
        // You can also record the flags in advance so that you can turn UI back completely if
        // you have set other flags before, such as translucent or full screen.
        decor.setSystemUiVisibility(0);
    }
}

Buena solución! Fue realmente adecuado para mi aplicación porque no tuve que cambiar la versión del SDK.
Vitor Braga

2
es más correcto: decorView.setSystemUiVisibility (decorView.getSystemUiVisibility () | View.SYSTEM_UI_FLAG_LIGHT_STATUS_BAR);
Anton Savenok

Esto me salvó el día! Gracias @ywwynm!
ReGaSLZR

Esta es la mejor solución, también funciona en teléfonos MI. Eres un salvador!
Numanqmr

¿Qué es shouldChangeStatusBarTintDark por favor?
Ibramazin

48

si tiene un nivel de API inferior a 23, debe usarlo de esta manera. funcionó para mí declarar esto bajo v21 / style .

<item name="colorPrimaryDark" tools:targetApi="23">@color/colorPrimary</item>
        <item name="android:windowLightStatusBar" tools:targetApi="23">true</item>

1
Te refieres a 23. :(
meditat

No, quise decir v21 / Style si no lo sabes, visita este enlace. stackoverflow.com/questions/28465064/creating-styles-v21-xml
Ritesh

Incluso si se coloca en un styles.xml con el calificador v21, esto solo funciona en dispositivos que ejecutan la API 23 y superior. De hecho, AS Lint resalta estos elementos con una advertencia que dice que se ignorará en las versiones de Android que no lo admitan. La tools:targetApi="23"parte le dice a Lint que suprima esta advertencia.
Subaru Tashiro

5

Ajuste windowLightStatusBara trueno funciona con teléfonos Mi, algunos teléfonos Meizu, teléfonos Blackview, etc. WileyFox que he encontrado tales truco para dispositivos Mi y Meizu. Esta no es una solución integral de este problema de rendimiento, pero tal vez sería útil para alguien.

Y creo que sería mejor decirle a su cliente que la barra de estado para colorear (por ejemplo) blanco no es una buena idea. en lugar de usar diferentes hacks, sería mejor definirlo de colorPrimaryDarkacuerdo con las pautas


-3

Sí, puedes cambiarlo. pero en la api 22 y superior, usando NotificationCompat.Builder y setColorized (true):

NotificationCompat.Builder mBuilder = new NotificationCompat.Builder(context, context.getPackageName())
                .setContentTitle(title)
                .setContentText(message)
                .setSmallIcon(icon, level)
                .setLargeIcon(largeIcon)
                .setContentIntent(intent)
                .setColorized(true)
                .setDefaults(0)
                .setCategory(Notification.CATEGORY_SERVICE)
                .setVisibility(NotificationCompat.VISIBILITY_PUBLIC)
                .setPriority(NotificationCompat.PRIORITY_HIGH);

¿Estás seguro? La documentación dice "Cuando se establece, el conjunto de colores con setColor (int) se utilizará como el color de fondo de esta notificación". y "Para la mayoría de los estilos, el color solo se aplicará si la notificación es para una notificación de servicio en primer plano". No parece posible cambiar el color de primer plano del icono.
Dominique

Esto es solo para notificaciones en primer plano y solo se aplica al elemento de notificación, no al icono de notificación.
Subaru Tashiro
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.