Android - 通知图标不会更改

时间:2016-10-07 01:59:52

标签: android notifications statusbar

我如何更改图标&我的通知中的largeIcon?我正在尝试这段代码:

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相同,而不是"stat_notifi_more"来自android drawable,为什么?

STATUS BAR ICON(电池,wifi和其他旁边左上角的通知小图标)也没有显示!

有人可以帮我这个吗?

编辑:我有lollipop 5.1.1和android 24(sdk)

EDIT2

通知图标(确定)(96x96像素):

enter image description here

状态栏图标(24x24px)(不正常,默认应用程序图标):

enter image description here

真实状态栏图标:

enter image description here

通知来源:

// 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>

2 个答案:

答案 0 :(得分:1)

Android通知将始终显示应用程序图标。您需要创建一个custom notification layout来显示除应用程序图标之外的图标。在这里,您可以使用您想要的任何图标/设计。

setSmallIcon()设置状态栏上而不是通知托盘中的通知图标。您在此处指定的绘图尺寸应非常小。检查预期的尺寸here。我相信你的drawable比预期的大小更大,因此,它无法呈现它。因此,您无法在状态栏中看到它。

修改:状态栏中的小图标将始终为白色,因此不会显示红色和绿色。我认为你无法看到绿色是因为颜色的半透明性质。即使您的绘图具有纯红色或绿色,它也只会显示为白色圆圈。 此SO Question包含有关它的详细信息。因此,我的建议是,您只需使用默认应用程序图标作为小图标,并在通知栏中使用您想要的任何自定义图标。

答案 1 :(得分:0)

如果您正在使用Firebase Cloud Messaging: 要在应用程序处于后台时更改小图标,可以从清单中进行更改:

        <meta-data
        android:name="com.google.firebase.messaging.default_notification_icon"
        android:resource="@drawable/notification_icon"
        android:value="@string/default_notification_channel_id" />