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í

GuilhE
fuente

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.

Kuba Spatny
fuente
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í

eOnOe
fuente
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);
    }
}
ywwynm
fuente
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>
Ritesh
fuente
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

Jackky777
fuente
-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);
hadi seylani
fuente
¿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