如何在NotificationCompat的Android中仅显示大图标而无需小图标

12

当我添加通知:

        NotificationCompat.Builder mBuilder =
                            new NotificationCompat.Builder(this)  
              .setSmallIcon(R.drawable.plus)
.setContentTitle(title)
.setAutoCancel(true) 
.setContentText(text)
.setSound(RingtoneManager .getDefaultUri(RingtoneManager.TYPE_NOTIFICATION))
.setLargeIcon(bm);

我看到一个有大图标和小图标的图片:在这里输入图片描述

如何只设置大图标而不显示小图标。 如果只使用setLargeIcon,我根本看不到通知,只会听到声音提示。


我想要这种类型的通知,就像“E”图像,然后是E图像角落的圆圈,请帮忙,我无法得到。 - Kevan Aghera
5个回答

17

小图标是必须的。如果您没有设置大图标,则会在选定颜色(setColor)的圆形中央放大您的小图标。

如果我是您,我会将那个空白的E放在透明背景上作为小图标,并为圆形设置红色。


9
获取小图标的ID,然后尝试隐藏它。
int smallIconId = ctx.getResources().getIdentifier("right_icon", "id", android.R.class.getPackage().getName());
if (smallIconId != 0) { 
    if (notification.contentView!=null)
        notification.contentView.setViewVisibility(smallIconId, View.INVISIBLE);
}

尝试查看此帖子,它也会有所帮助。

我在API 18、23(三星J1、Galaxy S6)上测试了该代码,可以正常工作。


2
注意: 需要一个小图标,表示您应该为其设置值,但是您可以尝试上面的代码来隐藏小图标,... - ShahinFasihi
或者只需设置为透明,不要对图标ID名称不更改作出疯狂的假设。 - Xavier Falempin
我没有尝试透明化小图标,但是使用ID对我来说很好;)但最终如果您这么说,那就按照您的方式。 - ShahinFasihi
设置透明图标不起作用,因为您在状态栏中看不到图标。相反,您应该创建自定义内容视图,并通过setContentView将其传递给构建器。 - Marcel Derks
以上代码帮助隐藏了用户拉下通知时的小图标。但是在 Lint 中显示“notification.contentView”已过时,有没有替代方法来消除警告? - ashok reddy
@ashokreddy 我使用 @SuppressWarnings("deprecation"),除非我需要提高 API 级别,否则我不会担心它。 - soger

2

根据之前的回答,你也可以隐藏展开的视图:

int smallIconId = AnghamiApp.getContext().getResources().getIdentifier("right_icon", "id", android.R.class.getPackage().getName());
            if (smallIconId != 0) {
                notification.contentView.setViewVisibility(smallIconId, View.INVISIBLE);
                notification.bigContentView.setViewVisibility(smallIconId, View.INVISIBLE);
            }

0

-1
public class MainActivity extends AppCompatActivity {
  @Override
  protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    Notification notification = new NotificationCompat.Builder(this)
            .setContentTitle("Test")
            .setContentText("Hii There")
            .setLargeIcon(BitmapFactory.decodeResource(getResources(), R.drawable.smallicon))
            .setAutoCancel(true)
            .build();
    NotificationManagerCompat notificationManager = NotificationManagerCompat.from(this);
    notificationManager.notify(123, notification);
  }
}

大家好,这是我的第一个回答,很抱歉回答晚了。请尝试这个答案,您将获得标题消息和大图标。忽略类的事情,您可以在任何类中实现它。 - Deepak Vishwakarma

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接