Zmiana tła ikony powiadomień w Lollipop

79

Przeglądałem wzorzec projektowy Powiadomienia i nie znalazłem niczego, co mówi o tle ikony powiadomienia. Jak zapewne zauważyłeś, dla niestandardowych powiadomień jest tylko jasnoszare tło. Ale aplikacje takie jak Hangouts lub po prostu powiadomienie o debugowaniu USB mają niestandardowy kolor tła ikony powiadomienia.

Czy istnieje możliwość zmiany tej szarości na coś innego? (programowo kolor tego konkretnego koła)

Widzieć zdjęcie

Zsolt Boldizsár
źródło
może mają specjalną ikonę z zielonym tłem?
Ahmed Hegazy
Nie jestem pewien, czy jest to nadal ważne dla kogokolwiek, ale od Androida 6.1 pojawiła się nowa flaga „NotificationCompat.Builder.setColorized (boolean colorize)”, która umożliwia zmianę „szarego tła” powiadomienia.
Tobias Reich

Odpowiedzi:

158

1) Uzyskaj kolor

int color = 0xff123456;
int color = getResources().getColor(R.color.my_notif_color);
int color = ContextCompat.getColor(context, R.color.my_notif_color);

2) Ustaw kolor powiadomienia

NotificationCompat.Builder builder = new NotificationCompat.Builder(this);
...
builder.setColor(color);
Notification notif = builder.build();

Kolor jest respektowany tylko w Lollipop i wpływa tylko na tło małej ikony . Jeśli wyświetlana jest duża ikona, za jej zawartość odpowiadasz wyłącznie.

Źródło: NotificationCompat.Builder # setColor (int)

Eugen Pechanec
źródło
11
Zgodnie z tym: stackoverflow.com/a/27023679/327011 setColor zmieni tylko kolor małej ikony. Strzec się.
neteinstein
5
1) Działa tylko na LOLLIPOP. 2) Nie ma to wpływu na obraz dostarczony przez Ciebie w setLargeBitmap. To tylko kolory tła małej ikony.
Eugen Pechanec
@AlexVPerl możesz wypróbować moje rozwiązanie tuż pod tym komentarzem
satyapol
1
„setColor” to poprawna odpowiedź, JEŚLI NIE USTAWISZ DUŻEJ IKONY. Będziesz mieć duży wyświetlacz małej ikony z my_notif_color jako tłem, bez dodanej małej plakietki. testowane na Androidzie 6.0
Loda
Mam problem. Ustawiłem ikonę na zieloną, ale po pojawieniu się powiadomienia zmienia się automatycznie na białą.
HUSNAIN SARWAR
10

jeśli zdefiniowałeś kolor w colors.xml, następnie w NotificationBuilder dodaj wartość jako

.setColor(getResources().getColor(R.color.<YOUR_COLOR>))

To powinno rozwiązać twój problem. Ma to wpływ tylko na tło ikony.

satyapol
źródło
Mam problem. Ustawiłem ikonę na zieloną, ale po pojawieniu się powiadomienia zmienia się automatycznie na białą.
HUSNAIN SARWAR
3

getColor(int) został wycofany w dniu Resources

Powinniśmy teraz użyć jednej z tych alternatyw:

Luís Ramalho
źródło
Mam problem, ustawiłem ikonę na zieloną, ale po pojawieniu się powiadomienia zmienia się automatycznie na białą ..
HUSNAIN SARWAR
Jeśli używasz jednolitego koloru, stara metoda działa dobrze.
Eugen Pechanec,
wciąż biała kwadratowa ikona pojawi się już w wersji 6.0, ale przed 5.0 appicon dobrze
Harsha