我正在为我创建用户通知的应用程序工作。我希望图标在状态栏中显示为白色,但在下拉通知菜单中显示时显示为蓝色。以下是Google Store应用程序执行相同操作的示例。
状态栏中的白色通知:
下拉菜单中的彩色通知:
我该如何复制这个?我需要设置哪些属性?
修改 这是我当前的代码 - 我将图像全部变为白色并带有透明背景,因此在状态栏中看起来很好,但在通知中,图像仍然是相同的白色:
private NotificationCompat.Builder getNotificationBuilder() {
return new NotificationCompat.Builder(mainActivity)
.setDeleteIntent(deletedPendingIntent)
.setContentIntent(startChatPendingIntent)
.setAutoCancel(true)
.setSmallIcon(R.drawable.skylight_notification)
.setColor(ContextCompat.getColor(mainActivity, R.color.colorPrimary))
.setContentTitle(mainActivity.getString(R.string.notification_title))
.setContentText(mainActivity.getString(R.string.notification_prompt));
}
答案 0 :(得分:21)
我在这里找到了我的问题的答案:https://stackoverflow.com/a/44950197/4394594
我不完全知道问题是什么,但是将我用于图标的巨大png放入此工具https://romannurik.github.io/AndroidAssetStudio/icons-notification.html#source.type=image&source.space.trim=1&source.space.pad=0&name=ic_skylight_notification
通过将生成的图标放入我的mipmap文件夹,我可以使setColor(...)
属性正常工作。
答案 1 :(得分:11)
以下是我为我的应用做的...
private void showNotification(Context context) {
Log.d(MainActivity.APP_TAG, "Displaying Notification");
Intent activityIntent = new Intent(context, MainActivity.class);
PendingIntent pendingIntent = PendingIntent.getActivity(context, 0, activityIntent, PendingIntent.FLAG_UPDATE_CURRENT);
NotificationCompat.Builder mBuilder = new NotificationCompat.Builder(context);
mBuilder.setSmallIcon(R.drawable.ic_notification);
mBuilder.setColor(Color.GREEN);
mBuilder.setContentIntent(pendingIntent);
mBuilder.setContentTitle("EarthQuakeAlert");
mBuilder.setContentText("It's been a while you have checked out earthquake data!");
mBuilder.setDefaults(Notification.DEFAULT_SOUND);
mBuilder.setAutoCancel(true);
NotificationManager mNotificationManager = (NotificationManager) context.getSystemService(Context.NOTIFICATION_SERVICE);
mNotificationManager.notify(1, mBuilder.build());
}
带颜色的样本:
答案 2 :(得分:11)
对于从控制台发送的firebase nofitications,您只需在清单中添加:
<meta-data
android:name="com.google.firebase.messaging.default_notification_icon"
android:resource="@drawable/white_logo" />
<meta-data
android:name="com.google.firebase.messaging.default_notification_color"
android:resource="@color/custom_color" />
white_logo是你的应用程序白色徽标,custom_color是你想让图标和文字着色的颜色。
此处有更多详情:https://firebase.google.com/docs/cloud-messaging/android/client
答案 3 :(得分:4)
构建通知时,您可以设置颜色和图标。 如果您的图标是纯白图像,它会在正确的位置为您应用颜色。
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
val manager = context.getSystemService(Context.NOTIFICATION_SERVICE) as NotificationManager
val notificationId = 10 // Some unique id.
// Creating a channel - required for O's notifications.
val channel = NotificationChannel("my_channel_01",
"Channel human readable title",
NotificationManager.IMPORTANCE_DEFAULT)
manager.createNotificationChannel(channel)
// Building the notification.
val builder = Notification.Builder(context, channel.id)
builder.setContentTitle("Warning!")
builder.setContentText("This is a bad notification!")
builder.setSmallIcon(R.drawable.skull)
builder.setColor(ContextCompat.getColor(context, R.color.colorPrimary))
builder.setChannelId(channel.id)
// Posting the notification.
manager.notify(notificationId, builder.build())
}
答案 4 :(得分:2)
我可能会迟到,但以上所有答案都不相关或已弃用。
您可以使用 setColor
的 NotificationCompat.Builder
方法轻松实现这一点
示例:
val builder = NotificationCompat.Builder(this, "whatever_channel_id")
.setSmallIcon(R.drawable.ic_notification) //set icon for notification
.setColor(ContextCompat.getColor(this, R.color.pink))
.setContentTitle("Notification Title")
.setContentText("Notification Message!")
现在它会将通知显示为粉红色
注意: 如果您使用的是 firebase,则不会直接看到颜色。您必须将其添加到清单文件中。
<meta-data
android:name="com.google.firebase.messaging.default_notification_icon"
android:resource="@drawable/ic_notification" />
<meta-data
android:name="com.google.firebase.messaging.default_notification_color"
android:resource="@color/pink" />
答案 5 :(得分:1)
我遇到了同样的问题。我找到的简单解决方案
NotificationManagerCompat compat = NotificationManagerCompat.from(this);
Notification notification = new NotificationCompat.Builder(this, CHANNEL_1_ID)
.setSmallIcon(R.drawable.notification_icon)
.setColor(ContextCompat.getColor(getApplicationContext(), R.color.white))
.setVibrate(new long[]{100, 500, 100, 5000})
.setContentTitle(title)
.setContentText(message)
.setStyle(new NotificationCompat.BigTextStyle()
.bigText(message))
.setPriority(NotificationCompat.PRIORITY_DEFAULT)
.setVibrate(vibrate)
.build();
答案 6 :(得分:0)
在设置drawable之前,您可以使用drawable的DrawableCompat.setTint(int drawable);
。
然后执行mutate()
drawable,否则颜色色调将应用于该drawable的每个实例
答案 7 :(得分:0)
如果您要根据Push通知或内置通知中的gmail和twitter更改颜色和标题名称,则需要在通知中添加这些行。
builder.setSmallIcon(R.drawable.skull)
builder.setColor(ContextCompat.getColor(context, R.color.colorPrimary))
第一行用于图标,第二行需要定义颜色
答案 8 :(得分:0)
使用Android Studio本身提供的“ Asset Studio” 创建通知图标(右键单击res文件夹,然后单击“新建”>“图像资产”)
Android Studio New Image Asset Studio Menu
然后设置通知颜色
int color = Color.argb(255, 228, 14, 18);
NotificationCompat.Builder notificationBuilder =
new NotificationCompat.Builder(this, channelId)
.setSmallIcon(R.drawable.ic_stat_notification)
.setContentTitle(title)
.setContentText(messageBody)
.setAutoCancel(true)
.setSound(defaultSoundUri)
.setContentIntent(pendingIntent)
.setColor(color)
.setPriority(NotificationCompat.PRIORITY_HIGH);
答案 9 :(得分:0)
对于像我这样使用 admin sdk 的人,请按照此在 manifest.xml 中添加这些内容
<meta-data
android:name="com.google.firebase.messaging.default_notification_icon"
android:resource="@drawable/ic_notification" />
<meta-data
android:name="com.google.firebase.messaging.default_notification_color"
android:resource="@color/pink" />
在您的消息负载中添加您想要的图标名称颜色!
var payloadImage = {
notification: {
title: data.title,
image: `${data.body}`,
sound: "default",
color: "#b75061",
},
};