Je me demandais s'il était possible de changer la couleur de la barre d'état icones (pas la couleur de la barre d'état, colorPrimaryDark
) Disons que je veux cette barre d'état avec:<item name="colorPrimaryDark">@Android:color/white</item>
et les icônes en noir, est-ce possible?
Merci.
MODIFIER:
Nouveau dans l'aperçu du développeur M: windowLightStatusBar. Retournant ceci sur dans votre thème indique au système d'utiliser un avant-plan sombre, utile pour barres d'état de couleur plus claire. Notez que l'aperçu M semble avoir un bogue où les icônes de notification restent blanches, alors que les icônes d’état du système changer correctement en noir semi-transparent.
de: Roman Nurik Google+ post
Pas depuis Lollipop. À partir d'Android 5.0, les instructions sont les suivantes:
Les icônes de notification doivent être entièrement blanches.
Même s’ils ne le sont pas, le système ne considère que le canal alpha de votre icône, en les rendant blancs.
La seule façon d’avoir une icône colorée sur Lollipop est de réduire votre targetSdkVersion
aux valeurs <21
, mais je pense que vous feriez mieux de suivre les instructions et d’utiliser uniquement des icônes blanches.
Si toutefois vous décidez néanmoins que vous voulez des icônes colorées, vous pouvez utiliser la méthode DrawableCompat.setTint de la nouvelle bibliothèque de support v4.
@eOnOe a expliqué comment nous pouvons changer la teinte de la barre d'état via XML. Mais nous pouvons aussi le changer dynamiquement dans le code:
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);
}
}
si vous avez un niveau d’API inférieur à 23, il vous faut l’utiliser de cette façon ... cela a fonctionné pour moi de déclarer ceci sous v21/style .
<item name="colorPrimaryDark" tools:targetApi="23">@color/colorPrimary</item>
<item name="Android:windowLightStatusBar" tools:targetApi="23">true</item>
Régler windowLightStatusBar
sur true
ne fonctionne pas avec les téléphones Mi, certains Meizu, les téléphones Blackview, WileyFox, etc. J'ai trouvé un tel hack pour les appareils Mi et Meizu. Ce n'est pas une solution complète de ce problème de performance, mais peut-être serait-il utile à quelqu'un.
Et je pense qu’il serait préférable de dire à votre client que la barre d’état à colorier (par exemple) blanche - n’est pas une bonne idée. au lieu d’utiliser différentes méthodes de piratage, il serait préférable de définir colorPrimaryDark
approprié conformément aux directives
Oui, vous pouvez le changer. mais dans api 22 et supérieur, en utilisant NotificationCompat.Builder et 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);