Android通知栏技巧

Android在appcompat-v7库中提供了一个NotificationCompat类来处理新老版本的兼容问题,我们在编写通知功能时都使用NotificationCompat这个类来实现,appcompat-v7库就会自动帮我们做好所有系统版本的兼容性处理了

NotificationManager manager = (NotificationManager) 
getSystemService(NOTIFICATION_SERVICE);
NotificationCompat.Builder builder = new NotificationCompat.Builder(context);
Notification notification = builder.setContentTitle("这是通知标题")
.setContentText("这是通知内容")
.setWhen(System.currentTimeMillis())
.setSmallIcon(R.mipmap.ic_launcher)
.setLargeIcon(BitmapFactory.decodeResource(getResources(), R.mipmap.ic_launcher)).build();
manager.notify(1, notification);

注意看一下我们给通知设置的图标,一个小图标、一个大图标,都是使用的R.mipmap.ic_launcher这张图。其实很多app都使用的这种做法,即直接拿应用程序的icon来作为通知的图标,好像这样看上去也挺合理的。

但是如果将targetSdkVersion指定成21或者更高的话,结果可能就不乐观了:
这里我们将targetSdkVersion指定成了23,然后重新运行程序并触发图标逻辑,效果如下图所示:

Android通知栏技巧_第1张图片
Paste_Image.png

恩?这是什么鬼,怎么通知图标变成白白的一个圆了。下拉之后的大图效果如下:

Android通知栏技巧_第2张图片
Paste_Image.png

好像下拉之后的大图还算正常,不过大图的右下角也有一个白白的圆。
这到底是为什么呢?实际上,Android从5.0系统开始,对于通知栏图标的设计进行了修改。现在Google要求,所有应用程序的通知栏图标,应该只使用alpha图层来进行绘制,而不应该包括RGB图层。

Android通知栏技巧_第3张图片
Paste_Image.png

这张图只用于替换通知的小图部分,大图仍然还是用原来的那样图就可以了。现在重新运行一下程序,效果如下图所示:


Android通知栏技巧_第4张图片
Paste_Image.png

那么怎样修改这个小圆圈的颜色呢?其实非常简单,只需要在NotificationCompat.Builder中再多连缀一个setColor()方法就可以了,如下所示:

Notification notification = builder ...... 
    .setColor(Color.parseColor("#EAA935"))
    .build();

小米手机比较特殊,MIUI系统直接无视我们设置的大图和小图,一律使用应用程序的icon来作为通知栏图标

你可能感兴趣的:(Android通知栏技巧)