Cor dos ícones da barra de status do Android

131

Eu queria saber se é possível alterar a cor dos ícones da barra de status ( não a cor da barra de status colorPrimaryDark) insira a descrição da imagem aqui Digamos que eu queira esta barra de status com:
<item name="colorPrimaryDark">@android:color/white</item>

e os ícones em preto, é possível?

Obrigado.

EDITAR:

Novo na visualização do desenvolvedor M: windowLightStatusBar. Ativar isso no seu tema indica ao sistema para usar um primeiro plano escuro, útil para barras de status de cores mais claras. Observe que a visualização M parece ter um erro no qual os ícones de notificação permanecem brancos, enquanto os ícones de status do sistema mudam corretamente para preto semitransparente.

de: Roman Nurik postagem do Google+ insira a descrição da imagem aqui

GuilhE
fonte

Respostas:

24

Desde Lollipop. Começando com o Android 5.0, as diretrizes dizem:

Os ícones de notificação devem estar totalmente brancos.

Mesmo se não estiverem, o sistema considerará apenas o canal alfa do seu ícone, tornando-os brancos

Gambiarra

A única maneira de ter um ícone colorido no Lollipop é diminuir seus targetSdkVersionvalores <21, mas acho que seria melhor seguir as diretrizes e usar apenas ícones brancos.

Se você ainda decidir que deseja ícones coloridos, poderá usar o método DrawableCompat.setTint da nova biblioteca de suporte da v4.

Kuba Spatny
fonte
3
Eu fiz algumas pesquisas no google e não consegui encontrar uma maneira adequada para isso, mas se as diretrizes do Android disserem que os ícones devem ser brancos, brancos é :)
GuilhE
11
Tem que haver uma solução melhor para isso. Vários aplicativos comerciais por aí estão usando cores. Este é um projeto horrivelmente idiota do Google. O que eles estavam pensando de novo?
not2qubit
Se você olhar para o aplicativo de notícias do Google, eles não têm ícones brancos na barra de status: play.google.com/store/apps/…
Adam Hurwitz
6
<item name="android:windowLightStatusBar">true</item>trabalhou para mim.
Adam Hurwitz
Gostaria de saber por que o aplicativo Gmail (lançado em 2019-04) pinta a barra de status em branco e os ícones / texto em cinza escuro.
21719 Daniel F
201

Sim, é possível alterá-lo para cinza (sem cores personalizadas), mas isso funciona apenas a partir da API 23 e acima, você só precisa adicioná-lo aos seus valores-v23 / styles.xml

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

insira a descrição da imagem aqui

eOnOe
fonte
2
mas a cor dos ícones dos itens de menu ainda está branca Como alterar a cor dos ícones dos itens de menu para preto?
Mateen Chaudhry
107

A @eOnOe respondeu como podemos alterar o tom da barra de status através do xml. Mas também podemos alterá-lo dinamicamente no 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
fonte
Ótima solução! Foi realmente adequado para o meu aplicativo porque não precisei alterar a versão do SDK.
Vitor Braga
2
é mais correto: decorView.setSystemUiVisibility (decorView.getSystemUiVisibility () | View.SYSTEM_UI_FLAG_LIGHT_STATUS_BAR);
Anton Savenok
Isso salvou meu dia! Obrigado @ywwynm!
ReGaSLZR
Esta é a melhor solução, também funciona em telefones MI. Você é um salvador!
Numanqmr 16/05/19
o que é ShouldChangeStatusBarTintDark, por favor?
Ibramazin 02/01
48

se você tiver um nível de API menor que 23, deverá usá-lo dessa maneira. funcionou para mim declarar isso sob v21 / style .

<item name="colorPrimaryDark" tools:targetApi="23">@color/colorPrimary</item>
        <item name="android:windowLightStatusBar" tools:targetApi="23">true</item>
Ritesh
fonte
1
Você quer dizer 23. :(
meditat
Não, eu quis dizer v21 / Style, se você não souber sobre isso, visite este link. stackoverflow.com/questions/28465064/creating-styles-v21-xml
Ritesh:
Mesmo se colocado em um styles.xml com qualificador v21, isso funcionará apenas em dispositivos executando a API 23 e acima. De fato, o AS Lint destaca esses itens com um aviso dizendo que será ignorado nas versões do Android que não o suportam. A tools:targetApi="23"peça diz ao Lint para suprimir esse aviso.
Subaru Tashiro
5

Definindo windowLightStatusBarpara truenão funcionar com telefones Mi, alguns telefones Meizu, telefones Blackview, WileyFox etc. Eu encontrei esse truque para dispositivos Mi e Meizu. Essa não é uma solução abrangente desse problema de desempenho, mas talvez seja útil a alguém.

E eu acho que seria melhor dizer ao seu cliente que colorir barra de status (por exemplo) branca - não é uma boa ideia. em vez de usar hacks diferentes, seria melhor definir apropriado de colorPrimaryDarkacordo com as diretrizes

Jackky777
fonte
-3

Sim, você pode mudar isso. mas na API 22 e acima, usando 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);
hadi seylani
fonte
Você tem certeza? A documentação diz "Quando definida, a cor definida com setColor (int) será usada como a cor de plano de fundo desta notificação". e "Para a maioria dos estilos, a coloração será aplicada apenas se a notificação for para uma notificação de serviço em primeiro plano". Não parece possível alterar a cor do primeiro plano do ícone.
Dominique
Isso é apenas para notificações em primeiro plano e se aplica apenas ao item de notificação - não ao ícone de notificação.
Subaru Tashiro