Android N 状态栏图标显示白底问题分析
2017-11-15 10:02
176 查看
前几天客户投诉,客户的apk在我们的设备上状态栏图标不能显示应用本身的图标,而是显示为正方形的白底图片.
首先遇到这个问题肯定是先百度一发...
然而在网上找到的文章全市基于Android L的代码分析,已经不适用Android N,所以针对Android N状态栏变色的流程说明一下.
Android N现在对通知还有状态栏图标的处理逻辑是:
1.首先判断APK的target version是Android L之后,如果是则直接会主动上色
2.如果在Android L之前则判断图片是否为Grayscale(灰度图),如果为灰度图的话也会有一个上色的操作.
具体涉及到代码有(代码根据高通平台Android N分析)
1.frameworks/base/core/java/android/app/Notification.java
colorable决定系统会不会主动上色,这块代码主要影响NotificationHeaderView的图标显示
2.frameworks/base/packages/SystemUI/src/com/android/systemui/statusbar/phone/NotificationIconAreaController.java
这块代码主要影响状态栏的图标,知道了这两处的位置就可以Android N进行客制化设置,比如小米会提取应用的Launcher Icon来做填充
首先遇到这个问题肯定是先百度一发...
然而在网上找到的文章全市基于Android L的代码分析,已经不适用Android N,所以针对Android N状态栏变色的流程说明一下.
Android N现在对通知还有状态栏图标的处理逻辑是:
1.首先判断APK的target version是Android L之后,如果是则直接会主动上色
2.如果在Android L之前则判断图片是否为Grayscale(灰度图),如果为灰度图的话也会有一个上色的操作.
具体涉及到代码有(代码根据高通平台Android N分析)
1.frameworks/base/core/java/android/app/Notification.java
private void processSmallIconColor(Icon smallIcon, RemoteViews contentView) { boolean colorable = !isLegacy() || getColorUtil().isGrayscaleIcon(mContext, smallIcon); if (colorable) { contentView.setDrawableParameters(R.id.icon, false, -1, resolveContrastColor(), PorterDuff.Mode.SRC_ATOP, -1); } contentView.setInt(R.id.notification_header, "setOriginalIconColor", colorable ? resolveContrastColor() : NotificationHeaderView.NO_COLOR); }
colorable决定系统会不会主动上色,这块代码主要影响NotificationHeaderView的图标显示
2.frameworks/base/packages/SystemUI/src/com/android/systemui/statusbar/phone/NotificationIconAreaController.java
private void applyNotificationIconsTint() { for (int i = 0; i < mNotificationIcons.getChildCount(); i++) { StatusBarIconView v = (StatusBarIconView) mNotificationIcons.getChildAt(i); boolean isPreL = Boolean.TRUE.equals(v.getTag(R.id.icon_is_pre_L)); boolean colorize = !isPreL || NotificationUtils.isGrayscale(v, mNotificationColorUtil); if (colorize) { v.setImageTintList(ColorStateList.valueOf( StatusBarIconController.getTint(mTintArea, v, mIconTint))); } } }
这块代码主要影响状态栏的图标,知道了这两处的位置就可以Android N进行客制化设置,比如小米会提取应用的Launcher Icon来做填充
相关文章推荐
- 解决Android 5.1系统以上通知状态栏小图标只显示白色问题
- android问题1-程序图标无法正常显示,只显示机器人图标
- 解决Android 4.0以上版本中OptionsMenu菜单不显示ICON图标的问题
- Andriod开发中遇到的问题(二)——Android启动图标不显示
- Android 类似未读短信图标显示数字效果的分析
- Android应用图标在状态栏上显示,以及显示不同的图标
- android2.1状态栏显示耳机图标
- android 状态栏显示运行图标
- Android 类似未读短信图标显示数字效果的分析
- android 4.4 电池电量显示分析(低电量提醒与电池图标)Java 层
- Android中Google Drive显示黑屏问题分析
- Android的Launcher中拖拽图标,停留,显示卸载的分析
- Android 类似未读短信图标显示数字效果的分析
- Android 有录音文件,卸载SD卡后,手机内存中的录音文件不显示问题分析与修改
- android2.1状态栏显示耳机图标
- android怎么判断程序在后台运行,让后将程序图标显示在状态栏
- 【Android开发】经典范例2-仿QQ在状态栏显示登录状态的图标
- android下录音后台将程序图标显示在状态栏上
- Android应用图标在状态栏上显示,以及显示不同的图标
- android怎么判断程序在后台运行,让后将程序图标显示在状态栏