1. 现象android
在Android4.0以上系统中,弹出通知栏消息时图标显示不全,以下图:app
2. 问题来源:ide
Android 4.0以上版本顶部导航栏StatusBar的实现类PhoneStatusBar的bug:函数
在com.android.systemui.SystemUIService的onCreate()中:ui
在此处选择实例化statusbar(手机通知栏)仍是systembar(平板通知栏):url
在PhoneStatusBar.start() => StatusBar.start()时调用自身的虚函数addIcon()(即调用PhoneStatusBar的addIcon()函数)中实例化顶部导航栏Icon的view(PhoneStatusBarView)的时候,利用常数设置了缩放比例,并无根据图片的实际大小缩放。spa
3. 解决方案orm
(1)初步:反射xml
public Notification(Context context, int icon, CharSequence tickerText, long when, CharSequence contentTitle, CharSequence contentText, Intent contentIntent) {}中的icon既是通知栏中提示的小icon,又是通知栏下拉菜单中的大icon,通知栏提示小icon没法修改,可是通知栏下拉菜单的大icon能够在组建RemoteViews时进行修改:blog
先在建立Notification时设置icon为小icon,在建立RemoteViews以后反射com.android.internal.R$id的icon值,从而调用Notification的contentView.setImageViewResource(id_icon, R.drawable.icon)重置大icon。
(2)进阶:android-support-v4.jar中的NotificationCompat.Builder
NotificationCompat.Builder支持设置smallicon(通知栏提示的小icon)和largeIcon(通知栏下拉菜单中的大icon)。NotificationCompat.Builder根据SDK版本的调用不一样的实现类进行兼容。