Andrii Chernenko
Andrii Chernenko

Reputation: 10204

Large notification icon background

Since Android 5.0 large icons in notifications have color background:

lollipop-notification

For small icon, it is the accent color of notification (Notification.Builder.setColor(int)). How do I set it for large icon? Is it part of the actual image? If it is, what should the circle radius be?

Upvotes: 26

Views: 17533

Answers (3)

Oleksandr Albul
Oleksandr Albul

Reputation: 1741

You could use icon with transparent background as large icon for notification. Also you could tint large and small icons.
As already said use setColor() to tint small icon.
And for the large icon use this function:

fun Bitmap.tint(color: Int): Bitmap =
    Bitmap.createBitmap(this.width, this.height, Bitmap.Config.ARGB_8888).also { outBmp ->
        Canvas(outBmp).drawBitmap(
            this, 0f, 0f,
            Paint().apply {
                this.colorFilter = PorterDuffColorFilter(color, PorterDuff.Mode.SRC_IN)
            }
        )
    }

So your code will look like this:

    NotificationCompat.Builder(context)
        .setColor(yourColor)
        .setLargeIcon(largeBitmap.tint(yourColor))
        .setSmallIcon(R.drawable.small_icon)

Here what you could get on Android 5.0: enter image description here On Android 10: enter image description here

Upvotes: 1

alxscms
alxscms

Reputation: 3047

Yes, the color of the large icon is part of the actual image. The dimensions of the large icon on lollipop are 40x40dp with a optical view filling the entire image. So you should create an asset of 40x40dp with a circle of a 20dp radius. You can set the notification's large icon as follows:

NotificationCompat.Builder mBuilder = new NotificationCompat.Builder(context)
    .setSmallIcon(R.drawable.notification_small_icon)
    .setLargeIcon(notificationLargeIconBitmap)
    .setContentTitle("Notification")
    .setContentText("Content text")
    .setColor(context.getResources().getColor(R.color.accent_color));

If you need the large icon to be from a drawable resource you can get a Bitmap instance like this:

Bitmap notificationLargeIconBitmap = BitmapFactory.decodeResource(
    context.getResources(), 
    R.drawable.notification_large_icon);

If you want your notification to be displayed nicely with previous versions of android (kitkat and below), you should have a squared version of your large icon with a dimension of 64x64dp.

Upvotes: 33

notz
notz

Reputation: 2467

An large icon should always have a background (i.e. avatar). It's also used on wear devices as background for a notification. It's displayed on different background colors, therefore it should be a non-transparent picture.

Upvotes: 1

Related Questions