Eu tenho um aplicativo mostrando notificações personalizadas. O problema é que, quando executado no Android 5, o pequeno ícone na barra de Notificação é mostrado em branco. Como posso consertar isso?
android
android-notifications
android-5.0-lollipop
Alejandro Casanova
fonte
fonte
Respostas:
A resposta aceita não está (totalmente) correta. Certamente, ele faz com que os ícones de notificação sejam exibidos em cores, mas com uma GRANDE desvantagem - definindo o SDK de destino como inferior ao Android Lollipop!
Se você resolver o problema do ícone branco, definindo o SDK de destino como 20, conforme sugerido, o aplicativo não segmentará o Android Lollipop, o que significa que você não poderá usar os recursos específicos do Lollipop.
Dê uma olhada em http://developer.android.com/design/style/iconography.html e você verá que o estilo branco é como as notificações devem ser exibidas no Android Lollipop.
No Lollipop, o Google também sugere que você use uma cor que será exibida atrás do ícone de notificação (branco) - https://developer.android.com/about/versions/android-5.0-changes.html
Então, acho que a melhor solução é adicionar um ícone de silhueta ao aplicativo e usá-lo se o dispositivo estiver executando o Android Lollipop.
Por exemplo:
E, no método getNotificationIcon:
fonte
ctrl+f
enotification
Concordo totalmente com o usuário Daniel Saidi. Para se ter
Color
porNotificationIcon
que estou escrevendo esta resposta.Para isso, você deve criar um ícone
Silhouette
e criar uma seçãoTransparent
onde quiser adicionar o seuColors
. ou seja,Você pode adicionar sua cor usando
.setColor(your_color_resource_here)
OBSERVAÇÃO:
setColor
está disponível apenasLollipop
para que você verifiqueOSVersion
Você também pode conseguir isso usando
Lollipop
como alvoSDK
.Todas as instruções
NotificationIcon
fornecidas nas Linhas de guia de notificação do Google Developer Console .Tamanho do ícone de notificação preferencial 24x24dp
E também consulte este link para Tamanhos de ícones de notificação para obter mais informações.
fonte
setColor
no Kitkat (API 19) e IceCreamSandwich (API 15), em ambos os casos, ignorou a cor, mas não travou . Então, posso omitir com segurança a verificação da versão do sistema operacional?Este é o código que o Android usa para exibir ícones de notificação:
Portanto, você precisa definir a versão sdk de destino para algo
<21
e os ícones permanecerão coloridos. Essa é uma solução feia, mas faz o que se espera que seja feito. De qualquer forma, eu realmente sugiro seguir as Diretrizes de design do Google : "Os ícones de notificação devem ser totalmente brancos".Aqui está como você pode implementá-lo:
Se você estiver usando o Gradle / Android Studio para criar seus aplicativos, use
build.gradle
:Caso contrário (Eclipse etc), use
AndroidManifest.xml
:fonte
Para evitar que os ícones de notificação fiquem brancos, use os ícones "Silhouette" para eles, por exemplo. imagens de fundo branco sobre transparente. Você pode usar o Irfanview para construí-los:
IrfanView
, pressione F12 para as ferramentas de pintura, limpe a imagem, se necessário (remova as partes indesejadas, alise e polonês)Image / Decrease Color Depth
a 2 (para uma foto em preto e branco)Image / Negative
(para uma imagem em branco sobre preto)Image / Resize/Resample
para 144 x 144 (use o Método de tamanho "Redimensionar" e não "Reamostrar", caso contrário, a imagem será aumentada para 24 bits de cor por pixel (24 BPP) novamenteFile / Save as PNG
, marqueShow option dialog
, marqueSave Transparent Color
, cliqueSave
e clique na cor preta na imagem para definir a cor transparenteO Android parece estar usando apenas a resolução da imagem drawable-xxhdpi (144 x 144), então copie o
ic_notification.png
arquivo resultante para\AndroidStudio\Projects\...\app\src\main\res\drawable-xxhdpi
. Use.setSmallIcon(R.drawable.ic_notification)
no seu código ou usegetNotificationIcon()
como Daniel Saidi sugeriu acima.Você também pode usar o Android Asset Studio de Roman Nurik .
fonte
Outra opção é tirar proveito dos diretórios drawable específicos da versão (mipmap) para fornecer gráficos diferentes para o Lollipop e versões posteriores.
No meu aplicativo, os diretórios "v21" contêm ícones com texto transparente, enquanto os outros diretórios contêm versão não transparente (para versões do Android anteriores ao Lollipop).
Que deve ser algo como isto:
Dessa forma, você não precisa procurar números de versão no código, por exemplo,
Da mesma forma, você pode fazer referência a "ic_notification" (ou o que você escolher) na sua carga útil do GCM, se você usar o atributo "icon".
https://developers.google.com/cloud-messaging/http-server-ref#notification-payload-support
fonte
setColor
(sem envolver código extra) dessa maneira?De acordo com as diretrizes de design do Android, você deve usar uma silhueta para
builder.setSmallIcon(R.drawable.some_notification_icon);
Mas se você ainda deseja mostrar um ícone colorido como um ícone de notificação, aqui está o truque para pirulito e, acima, use o código abaixo. O largeIcon atuará como um ícone de notificação principal e você também precisará fornecer uma silhueta para o smallIcon, pois será mostrado na parte inferior direita do largeIcon.E use antes do pirulito apenas
.setSmallIcon(R.mipmap.ic_launcher)
com o seu construtor.fonte
Agora, o Android Studio fornece um plug-in Image Asset , que será gerado ícone em todas as pastas de drawbale necessárias
O Image Asset Studio ajuda a criar vários tipos de ícones em diferentes densidades e mostra exatamente onde eles serão colocados no seu projeto. Ele inclui ferramentas para ajustar seus ícones e adicionar cenários, enquanto exibe o resultado em um painel de visualização, para que apareçam exatamente como você pretendia. Essas ferramentas podem otimizar drasticamente o processo de design e importação de ícones.
Você pode acessar o Image Asset clicando em novo> clique na opção Image Asset e a janela será exibida assim: -
fonte
Eu estava enfrentando o mesmo problema e foi por causa do meu ícone de notificação do aplicativo não estar plano. Para pirulito versão Android ou mesmo pirulito abaixo, o ícone de notificação do aplicativo deve ser plano, não use o ícone com sombras etc.
Abaixo está o código que funcionou perfeitamente em todas as versões do Android.
Ícone errado
Ícone direito
fonte
O canal alfa é o único dado da imagem que o Android usa para ícones de notificação:
alpha == 1
: pixels mostram brancoalpha == 0
: os pixels são exibidos como a cor escolhida emNotification.Builder#setColor(int)
Isso é mencionado em https://developer.android.com/about/versions/android-5.0-changes.html :
Quase todos os drawables internos parecem ser imagens alfa adequadas para isso, então você pode usar algo como:
mas ainda estou procurando o documento da API que confirma oficialmente isso.
Testado no Android 22.
fonte
setColor
no Kitkat (API 19) e IceCreamSandwich (API 15), em ambos os casos, ignorou a cor, mas não travou . Então, posso omitir com segurança a verificação da versão do sistema operacional?remova o
android:targetSdkVersion="21"
manifest.xml. vai funcionar! e a partir disso, não há nenhum problema no seu apk, apenas um truque eu aplico isso e encontrei o ícone colorido na notificaçãofonte
As notificações estão em escala de cinza, conforme explicado abaixo. Eles não são em preto e branco, apesar do que outros escreveram. Você provavelmente já viu ícones com vários tons, como barras de força da rede.
Antes da API 21 (Lollipop 5.0), os ícones de cores funcionavam. Você pode forçar seu aplicativo a segmentar a API 20, mas isso limita os recursos disponíveis para ele, portanto, não é recomendado. Você pode testar o nível da API em execução e definir um ícone de cor ou em escala de cinza adequadamente, mas isso provavelmente não vale a pena. Na maioria dos casos, é melhor usar um ícone em escala de cinza.
As imagens têm quatro canais, RGBA (vermelho / verde / azul / alfa). Para ícones de notificação, o Android ignora os canais R, G e B. O único canal que conta é o Alpha, também conhecido como opacidade. Crie seu ícone com um editor que lhe dê controle sobre o valor Alfa de suas cores de desenho.
Como os valores Alpha geram uma imagem em escala de cinza:
Alterando-o com
setColor
:Ligue
NotificationCompat.Builder.setColor(int argb)
. A partir da documentação paraNotification.color
:Meus testes com setColor mostram que os componentes Alpha não são ignorados; em vez disso, eles ainda fornecem escala de cinza. Valores alfa mais altos tornam um pixel branco. Os valores alfa mais baixos transformam um pixel na cor de fundo (preta no meu dispositivo) na área de notificação ou na cor especificada na notificação suspensa. (Parece que outros relataram comportamentos ligeiramente diferentes, portanto, esteja ciente!)
fonte
Post android Lollipop release android mudou as diretrizes para exibir ícones de notificação na barra de notificações. A documentação oficial diz "Atualizar ou remover ativos que envolvem cores. O sistema ignora todos os canais não alfa nos ícones de ação e no ícone principal de notificação. Você deve assumir que esses ícones serão apenas alfa. O sistema desenha ícones de notificação em branco e ícones de ação em cinza escuro. " Agora, o que isso significa em termos de leigos é "Converta todas as partes da imagem que você não deseja mostrar em pixels transparentes. Todas as cores e pixels não transparentes são exibidos em branco "
Você pode ver como fazer isso em detalhes com as capturas de tela aqui https://blog.clevertap.com/fixing-notification-icon-for-android-lollipop-and-above/
espero que ajude
fonte
Você precisa importar a imagem PNG transparente de cor única. Assim, você pode definir a cor do ícone no ícone pequeno. Caso contrário, será mostrado em branco em alguns dispositivos como o MOTO
fonte
Se você estiver usando o GoogleFireBaseMessaging, poderá definir "id do ícone" na carga útil "notificação" (isso ajuda a resolver o problema do ícone da barra branca):
defina ic_notification como seu próprio ID em R.drawable.
fonte
Eu também enfrentei muitos problemas com isso, mas depois de pesquisar em toda a Internet, encontrei soluções diferentes para esse problema. Deixe-me resumir todas as soluções e explicar:
Nota: Esta solução é para usuários do Phonegap cordova
<preference name="android-targetSdkVersion" value="20"/>
Você precisa definir seu valor android-targetSdkVersion como menor que 21. Portanto, depois de definir esse valor, a imagem do ícone de notificação aparecerá até o Android 6 (Marshmallow), e não funcionará no Android 7 (Nougat). Esta solução funcionou para mim.
<preference name="StatusBarStyle" value="lightcontent" />
Mas essa solução funcionará apenas quando o aplicativo for aberto. Então, acho que essa solução não é a melhor, mas funcionou para muitos usuários.
E tenho certeza de que uma das soluções acima funcionará para o seu problema.
fonte
FYI: Se o ícone não aparecer, verifique se a sua configuração de notificação local ou remota contém o nome correto do ícone, ou seja
fonte
Acho que é tarde demais para falar sobre a API 21, mas achei uma maneira fácil.
Ao usar as 'Notificações personalizadas (layout personalizado)',
RemoteView
e
torna essas imagens brancas no pirulito (API 21).
Mas ao usar
A imagem não fica com máscara branca!
fonte
De acordo com a documentação, o ícone de notificação deve estar branco desde o Android 3.0 (API Nível 11) :
https://developer.android.com/guide/practices/ui_guidelines/icon_design_status_bar
fonte
misture essas duas coisas no app gradle
fonte
android:targetSdkVersion="20"
deve ser <21
.fonte