Colore delle icone della barra di stato Android


131

Mi chiedevo se è possibile cambiare il colore delle icone della barra di stato ( non il colore della barra di stato colorPrimaryDark) inserisci qui la descrizione dell'immagine Diciamo che voglio questa barra di stato con:
<item name="colorPrimaryDark">@android:color/white</item>

e le icone in nero, è possibile?

Grazie.

MODIFICARE:

Novità nell'anteprima per sviluppatori M: windowLightStatusBar. Attivando questa opzione nel tema, si dice al sistema di utilizzare un primo piano scuro, utile per le barre di stato di colore più chiaro. Si noti che l'anteprima M sembra avere un bug in cui le icone di notifica rimangono bianche, mentre le icone di stato del sistema cambiano correttamente in nero semitrasparente.

da: post Google+ di Roman Nurik inserisci qui la descrizione dell'immagine

Risposte:


24

Non dai tempi di Lollipop. A partire da Android 5.0, le linee guida dicono:

Le icone di notifica devono essere interamente bianche.

Anche se non lo sono, il sistema considererà solo il canale alfa della tua icona, rendendoli bianchi

Soluzione

L'unico modo per avere un'icona colorata su Lollipop è abbassare i targetSdkVersionvalori a <21, ma penso che faresti meglio a seguire le linee guida e utilizzare solo icone bianche.

Se tuttavia decidi ancora di volere icone colorate, puoi usare il metodo DrawableCompat.setTint dalla nuova libreria di supporto v4.


3
Ho fatto una ricerca su Google e non sono riuscito a trovare un modo corretto per farlo, ma se le linee guida di Android dicono che le icone devono essere bianche, è bianco :) Grazie!
GuilhE

11
Ci deve essere una soluzione migliore per questo. Diverse app commerciali là fuori usano i colori. Questa è una mossa di design orribilmente idiota di Google. Cosa stavano pensando di nuovo, se non del tutto?
not2qubit

Se guardi l'app di notizie di Google, non hanno icone bianche della barra di stato: play.google.com/store/apps/…
Adam Hurwitz

6
<item name="android:windowLightStatusBar">true</item>ha funzionato per me.
Adam Hurwitz

Mi chiedo perché l'app Gmail (come rilasciata nel 2019-04) colora la barra di stato in bianco e le icone / il testo in grigio scuro.
Daniel F

201

Sì, è possibile cambiarlo in grigio (senza colori personalizzati) ma funziona solo dall'API 23 e versioni successive, devi solo aggiungerlo nel tuo values-v23 / styles.xml

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

inserisci qui la descrizione dell'immagine


2
ma il colore delle icone delle voci di menu è ancora bianco come cambiare il colore delle icone delle voci di menu in nero?
Mateen Chaudhry

107

@eOnOe ha risposto a come possiamo cambiare la tinta della barra di stato tramite xml. Ma possiamo anche cambiarlo dinamicamente nel codice:

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);
    }
}

Bella soluzione! Era davvero adatto alla mia applicazione perché non dovevo cambiare la versione dell'SDK.
Vitor Braga

2
è più corretto: decorView.setSystemUiVisibility (decorView.getSystemUiVisibility () | View.SYSTEM_UI_FLAG_LIGHT_STATUS_BAR);
Anton Savenok,

Questo mi ha salvato la giornata! Grazie @ywwynm!
ReGaSLZR

Questa è la soluzione migliore, funziona anche sui telefoni MI. Sei un salvatore!
Numanqmr

che cosa è ShouldChangeStatusBarTintDark per favore ??
Ibramazin il

48

se hai un livello API inferiore a 23, devi usarlo in questo modo. ha funzionato per me dichiararlo sotto v21 / style .

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

1
Intendi 23. :(
meditat

No, intendevo v21 / Style se non lo sai, visita questo link. stackoverflow.com/questions/28465064/creating-styles-v21-xml
Ritesh

Anche se inserito in un styles.xml con qualificatore v21, funziona solo su dispositivi che eseguono api 23 e versioni successive. Infatti AS Lint evidenzia questi elementi con un avviso dicendo che verranno ignorati nelle versioni di Android che non lo supportano. La tools:targetApi="23"parte dice a Lint di sopprimere questo avviso.
Subaru Tashiro

5

L'impostazione windowLightStatusBarper truenon funziona con i telefoni Mi, alcuni telefoni Meizu, i telefoni Blackview, WileyFox ecc. Ho trovato un tale trucco per i dispositivi Mi e Meizu. Questa non è una soluzione completa a questo problema di performance, ma forse sarebbe utile a qualcuno.

E penso che sarebbe meglio dire al tuo cliente che colorare la barra di stato (ad esempio) di bianco non è una buona idea. invece di utilizzare diversi hack sarebbe meglio definire appropriati colorPrimaryDarksecondo le linee guida


-3

Sì, puoi cambiarlo. ma in api 22 e versioni successive, utilizzando NotificationCompat.Builder e 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);

Sei sicuro? La documentazione dice "Quando impostato, il colore impostato con setColor (int) verrà utilizzato come colore di sfondo di questa notifica." e "Per la maggior parte degli stili, la colorazione verrà applicata solo se la notifica è per una notifica di servizio in primo piano". Non sembra possibile cambiare il colore di primo piano dell'icona.
Dominique

Questo è solo per le notifiche in primo piano e si applica solo all'elemento di notifica, non all'icona di notifica.
Subaru Tashiro
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.