Android - 通知图标不会改变
Android - Notification icon will not change
如何更改通知中的图标和大图标?我正在尝试这段代码:
NotificationManager notificationManager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
NotificationCompat.Builder builder = new NotificationCompat.Builder(this);
Notification notification = builder
.setSmallIcon(android.R.drawable.stat_notify_more)
.setWhen(System.currentTimeMillis())
.setAutoCancel(true)
.setContentTitle("title")
.setContentText("text").build();
notificationManager.notify(666, notification);
效果很好,显示了通知。但是通知仍然像 application icon
,而不是 android drawable
的 "stat_notifi_more
",为什么?
而且 STATUS BAR ICON
(通知小图标位于左上角,靠近电池、wifi 和其他)也没有显示!
有人可以帮我解决这个问题吗?
编辑:我有 lollipop 5.1.1 和 android 24 (sdk)
EDIT2:
通知图标(确定)(96x96px):
状态栏图标 (24x24px)(不正常,默认应用程序图标):
真实状态栏图标:
通知来源:
// Using RemoteViews to bind custom layouts into Notification
RemoteViews remoteViews = new RemoteViews(getPackageName(),
R.layout.notification_layout);
// Set Notification Title
String strtitle = "title";
// Set Notification Text
String strtext = "text";
// Open NotificationView Class on Notification Click
Intent intent = new Intent(this, MainActivity.class);
// Send data to NotificationView Class
intent.putExtra("title", strtitle);
intent.putExtra("text", strtext);
// Open NotificationView.java Activity
PendingIntent pIntent = PendingIntent.getActivity(this, 0, intent,
PendingIntent.FLAG_UPDATE_CURRENT);
// Locate and set the Image into customnotificationtext.xml ImageViews
remoteViews.setImageViewResource(R.id.imagenotileft, R.drawable.stacionar_xhdpi_green);
// Locate and set the Text into customnotificationtext.xml TextViews
remoteViews.setTextViewText(R.id.title, "title");
remoteViews.setTextViewText(R.id.text, "content");
NotificationCompat.Builder builder = new NotificationCompat.Builder(this)
.setSmallIcon(R.drawable.wall_black)
.setTicker("t")
.setContentIntent(pIntent)
.setContent(remoteViews);
// Create Notification Manager
NotificationManager notificationmanager = (NotificationManager) getSystemService(NOTIFICATION_SERVICE);
// Build Notification with Notification Manager
notificationmanager.notify(0, builder.build());
xml:
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent" >
<ImageView
android:id="@+id/imagenotileft"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
<TextView
android:id="@+id/title"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_toRightOf="@+id/imagenotileft" />
<TextView
android:id="@+id/text"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_below="@+id/title"
android:layout_toRightOf="@+id/imagenotileft" />
</RelativeLayout>
Android 通知将始终显示应用程序图标。您将需要创建一个 custom notification layout 来显示应用程序图标以外的图标。在这里,你可以使用任何你想要的icon/design。
setSmallIcon()
设置状态栏上的通知图标,而不是通知托盘中的图标。您在此处分配的可绘制对象的尺寸应该非常小。检查预期大小 here。我相信您的可绘制对象大于预期大小,因此无法渲染它。因此,您无法在状态栏中看到它。
编辑: 状态栏的小图标永远是白色的,所以你的红色和绿色不会显示。我认为你看不到绿色是因为颜色的半透明性质。即使您的可绘制对象具有纯红色或绿色,它也只会显示为白色圆圈。
这个 有关于它的详细信息。因此,我的建议是您只需为小图标使用默认应用程序图标,并为通知托盘中的通知使用您想要的任何自定义图标。
如果您使用的是 Firebase 云消息传递:
要在应用程序处于后台时更改小图标,您可以从清单中执行此操作:
<meta-data
android:name="com.google.firebase.messaging.default_notification_icon"
android:resource="@drawable/notification_icon"
android:value="@string/default_notification_channel_id" />
如何更改通知中的图标和大图标?我正在尝试这段代码:
NotificationManager notificationManager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
NotificationCompat.Builder builder = new NotificationCompat.Builder(this);
Notification notification = builder
.setSmallIcon(android.R.drawable.stat_notify_more)
.setWhen(System.currentTimeMillis())
.setAutoCancel(true)
.setContentTitle("title")
.setContentText("text").build();
notificationManager.notify(666, notification);
效果很好,显示了通知。但是通知仍然像 application icon
,而不是 android drawable
的 "stat_notifi_more
",为什么?
而且 STATUS BAR ICON
(通知小图标位于左上角,靠近电池、wifi 和其他)也没有显示!
有人可以帮我解决这个问题吗?
编辑:我有 lollipop 5.1.1 和 android 24 (sdk)
EDIT2:
通知图标(确定)(96x96px):
状态栏图标 (24x24px)(不正常,默认应用程序图标):
真实状态栏图标:
通知来源:
// Using RemoteViews to bind custom layouts into Notification
RemoteViews remoteViews = new RemoteViews(getPackageName(),
R.layout.notification_layout);
// Set Notification Title
String strtitle = "title";
// Set Notification Text
String strtext = "text";
// Open NotificationView Class on Notification Click
Intent intent = new Intent(this, MainActivity.class);
// Send data to NotificationView Class
intent.putExtra("title", strtitle);
intent.putExtra("text", strtext);
// Open NotificationView.java Activity
PendingIntent pIntent = PendingIntent.getActivity(this, 0, intent,
PendingIntent.FLAG_UPDATE_CURRENT);
// Locate and set the Image into customnotificationtext.xml ImageViews
remoteViews.setImageViewResource(R.id.imagenotileft, R.drawable.stacionar_xhdpi_green);
// Locate and set the Text into customnotificationtext.xml TextViews
remoteViews.setTextViewText(R.id.title, "title");
remoteViews.setTextViewText(R.id.text, "content");
NotificationCompat.Builder builder = new NotificationCompat.Builder(this)
.setSmallIcon(R.drawable.wall_black)
.setTicker("t")
.setContentIntent(pIntent)
.setContent(remoteViews);
// Create Notification Manager
NotificationManager notificationmanager = (NotificationManager) getSystemService(NOTIFICATION_SERVICE);
// Build Notification with Notification Manager
notificationmanager.notify(0, builder.build());
xml:
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent" >
<ImageView
android:id="@+id/imagenotileft"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
<TextView
android:id="@+id/title"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_toRightOf="@+id/imagenotileft" />
<TextView
android:id="@+id/text"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_below="@+id/title"
android:layout_toRightOf="@+id/imagenotileft" />
</RelativeLayout>
Android 通知将始终显示应用程序图标。您将需要创建一个 custom notification layout 来显示应用程序图标以外的图标。在这里,你可以使用任何你想要的icon/design。
setSmallIcon()
设置状态栏上的通知图标,而不是通知托盘中的图标。您在此处分配的可绘制对象的尺寸应该非常小。检查预期大小 here。我相信您的可绘制对象大于预期大小,因此无法渲染它。因此,您无法在状态栏中看到它。
编辑: 状态栏的小图标永远是白色的,所以你的红色和绿色不会显示。我认为你看不到绿色是因为颜色的半透明性质。即使您的可绘制对象具有纯红色或绿色,它也只会显示为白色圆圈。
这个
如果您使用的是 Firebase 云消息传递: 要在应用程序处于后台时更改小图标,您可以从清单中执行此操作:
<meta-data
android:name="com.google.firebase.messaging.default_notification_icon"
android:resource="@drawable/notification_icon"
android:value="@string/default_notification_channel_id" />