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,然后重新运行程序并触发图标逻辑,效果如下图所示:

Paste_Image.png

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

Paste_Image.png

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

Paste_Image.png

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


Paste_Image.png

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

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

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

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 原创微信公众号郭霖 WeChat ID: guolin_blog 对于通知栏的使用,Android各个版本其实都有...
    木木00阅读 903评论 1 11
  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 173,552评论 25 708
  • 转载自:http://blog.csdn.net/vipzjyno1/article/details/252480...
    HEXG_阅读 5,935评论 0 2
  • 前言# 今天再来看一个系统的时间函数,用来取得从1970年1月1日到指定日期的时间的秒数,这是一个有用的参数,在一...
    AlbertS阅读 37,168评论 12 5
  • 冬去春来 你出现在冬季,你消失在冬季,你心如发丝,情如冰霜,所以祝福我自己,你终于走了; 你踏春风而来,你似春意盎...
    爱洲予菲阅读 294评论 0 0