大通知图标背景

时间:2014-11-17 13:29:58

标签: android android-notifications android-5.0-lollipop

由于通知中的Android 5.0大图标具有彩色背景:

lollipop-notification

对于小图标,它是通知的强调颜色(Notification.Builder.setColor(int))。如何将其设置为大图标?它是实际图像的一部分吗?如果是,圆半径应该是多少?

3 个答案:

答案 0 :(得分:32)

是的,大图标的颜色是实际图像的一部分。棒棒糖上的大图标尺寸 40x40dp ,光学视图填充整个图像。因此,您应创建一个40x40dp的资源,其半径为20dp。 您可以按如下方式设置通知的大图标:

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

如果您需要来自可绘制资源的大图标,您可以获得这样的Bitmap实例:

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

如果您希望您的通知与以前版本的Android( kitkat及以下)很好地显示,那么您应该有一个大图标的平方版本,其尺寸为 64x64dp

答案 1 :(得分:1)

您可以使用带有透明背景的图标作为通知的大图标。您也可以为大图标和小图标着色。
如前所述,使用 setColor() 为小图标着色。
对于大图标,请使用此功能:

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

所以你的代码看起来像这样:

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

您可以在 Android 5.0 上获得以下内容: enter image description here 在 Android 10 上: enter image description here

答案 2 :(得分:0)

大图标应始终具有背景(即头像)。它也用在磨损设备上作为通知的背景。它以不同的背景颜色显示,因此它应该是不透明的图片。