【发布时间】:2014-11-17 13:29:57
【问题描述】:
由于 Android 5.0 通知中的大图标具有彩色背景:
对于小图标,它是通知的强调色(Notification.Builder.setColor(int))。如何设置大图标?它是实际图像的一部分吗?如果是,圆的半径应该是多少?
【问题讨论】:
标签: android android-notifications android-5.0-lollipop
由于 Android 5.0 通知中的大图标具有彩色背景:
对于小图标,它是通知的强调色(Notification.Builder.setColor(int))。如何设置大图标?它是实际图像的一部分吗?如果是,圆的半径应该是多少?
【问题讨论】:
标签: android android-notifications android-5.0-lollipop
是的,大图标的颜色是实际图像的一部分。棒棒糖上大图标的尺寸为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 的方形版本的大图标强>。
【讨论】:
您可以使用带有透明背景的图标作为通知的大图标。您还可以为大图标和小图标着色。
如前所述,使用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)
【讨论】:
大图标应始终有背景(即头像)。它还用于可穿戴设备作为通知的背景。它以不同的背景颜色显示,因此应该是不透明的图片。
【讨论】: