衆所周知,Android5.0以上系統通知欄做了很大改進,小圖標只能用alpha圖層進行繪製,不能用rgb圖層,就這個問題,我們用一個例子說話。
1. 廢話少說,直接上代碼
NotificationManager notificationManager= (NotificationManager) getSystemService(NOTIFICATION_SERVICE);
NotificationCompat.Builder builder=new NotificationCompat.Builder(this);
Notification notification=builder.setContentTitle(getString(R.string.notification_title))
.setContentText(getString(R.string.notification_content)).setWhen(System.currentTimeMillis())
.setDefaults(Notification.DEFAULT_LIGHTS).setSmallIcon(R.mipmap.weixin_raw)
.setLargeIcon(BitmapFactory.decodeResource(getResources(),R.mipmap.weixin_raw))
.setContentIntent(PendingIntent.getActivities(this,0x0001,new Intent[]{new Intent(this,MainActivity.class)},PendingIntent.FLAG_UPDATE_CURRENT))
.build();
notificationManager.notify(1,notification);
R.mipmap.weixin_raw的圖片如下:
2、效果圖如下:
通知欄沒有下拉時:
可以看到,白乎乎的一個圖片,完全看不清圖標
通知欄下拉時:
好像還蠻正常的,可以右下角有一個白乎乎的圓形圖標
3、下面我們按照google的要求改變小圖標
我們設計一個小圖標名字叫icon_weixin,如下
周圍全是透明,中間用白色勾勒出一個圖標
然後代碼設置如下
NotificationManager notificationManager= (NotificationManager) getSystemService(NOTIFICATION_SERVICE);
NotificationCompat.Builder builder=new NotificationCompat.Builder(this);
Notification notification=builder.setContentTitle(getString(R.string.notification_title))
.setContentText(getString(R.string.notification_content)).setWhen(System.currentTimeMillis())
.setDefaults(Notification.DEFAULT_LIGHTS).setSmallIcon(R.mipmap.icon_weixin)
.setLargeIcon(BitmapFactory.decodeResource(getResources(),R.mipmap.weixin_raw))
.setContentIntent(PendingIntent.getActivities(this,0x0001,new Intent[]{new Intent(this,MainActivity.class)},PendingIntent.FLAG_UPDATE_CURRENT))
.build();
notificationManager.notify(1,notification);
就改了一個地方,設置setSmallIcon(R.mipmap.icon_weixin)
下面看效果圖:
正常了有木有,不過下拉後那個小圖表默認是灰色邊,可以通知builder.setColor()改變這個顏色值
代碼如下
NotificationManager notificationManager= (NotificationManager) getSystemService(NOTIFICATION_SERVICE);
NotificationCompat.Builder builder=new NotificationCompat.Builder(this);
Notification notification=builder.setContentTitle(getString(R.string.notification_title))
.setContentText(getString(R.string.notification_content)).setWhen(System.currentTimeMillis())
.setDefaults(Notification.DEFAULT_LIGHTS).setSmallIcon(R.mipmap.icon_weixin)
.setColor(Color.parseColor("#880000FF"))
.setLargeIcon(BitmapFactory.decodeResource(getResources(),R.mipmap.weixin_raw))
.setContentIntent(PendingIntent.getActivities(this,0x0001,new Intent[]{new Intent(this,MainActivity.class)},PendingIntent.FLAG_UPDATE_CURRENT))
.build();
notificationManager.notify(1,notification);
僅僅加了一行:setColor(Color.parseColor(“#880000FF”)),把顏色設置爲一個有透明度的藍色
效果圖如下:
至此,我們的例子就完成了。
源碼地址:https://github.com/naiyizhang/BlogDemo/
項目下的NotificationDemo即爲源碼
需要設計師朋友特別注意的時,5.0以上的通知需要設計兩個兩個,大圖標正常設計,一般是應用的圖標;小圖標背景色要透明,然後用純白勾勒出你需要的圖標(用任意顏色都會表現爲白色)。