免费做cpa单页网站,百度做网站好吗,汕头人才招聘网最新招聘信息,搭建网站服务器问题及现象
从android L版本开始#xff0c;为了统一图标样式#xff0c;会将通知栏、状态栏等显示图标处统一为白底或黑底#xff0c;以促使开发人员规范图标设计。 从现象看#xff0c;状态栏会显示一个白底的方框#xff1b;下拉通知栏展开时的图标为白底方框加圆框…问题及现象
从android L版本开始为了统一图标样式会将通知栏、状态栏等显示图标处统一为白底或黑底以促使开发人员规范图标设计。 从现象看状态栏会显示一个白底的方框下拉通知栏展开时的图标为白底方框加圆框不展开时为黑底方框。
解决方案
通过trace log定位填色代码以下两处有助于定位代码 R.id.icon_is_pre_L targetSdkVersion Build.VERSION_CODES.LOLLIPOP
可见通过修改targetSdkVersion小于Build.VERSION_CODES.LOLLIPOP(21)即可但适配新平台特别是高版本android 11 13 有跃升很困难。
这里不得不吐嘈一下android开发环境在应用开发的黄金时期大量APP如雨后纯笋为无数商家获得大量回报而当这些APP趋于稳定后一些公司为了成本裁掉了一大批APP开发人员在低维护成本的情况下尝到了甜头。 但是android作为科技领域的开拓者前行的步伐不可能停止越来越新的技术使得APP过于老老老无法及时更新换代就会导致一系列问题甚至是业务问题。 博主是一名framework开发选手对此深恶痛绝客户来一句“APP不能改作为理由”犹如圣旨一般系统就必须适配把android原生优美的框架代码改得一塌糊涂涉及安全性的代码更惨不忍睹。
言归正传上代码以MTK平台代码为例
framework层添加配置统一控制功能
Index: frameworks/base/core/res/res/values/config.xml--- frameworks/base/core/res/res/values/config.xml (版本 349)frameworks/base/core/res/res/values/config.xml (版本 353)-5832,4 5832,7 string-array nameconfig_serviceStateLocationAllowedPackagesitemcom.android.phone/item/string-array!-- Compatible with non-standard image resources --bool nameconfig_enable_icon_colorizedfalse/bool/resources
Index: frameworks/base/core/res/res/values/symbols.xml--- frameworks/base/core/res/res/values/symbols.xml (版本 349)frameworks/base/core/res/res/values/symbols.xml (版本 353)-4809,4 4809,6 !-- for watermark --java-symbol typebool nameconfig_enable_icon_colorized //resources
状态栏
Index: vendor/mediatek/proprietary/packages/apps/SystemUI/src/com/android/systemui/statusbar/phone/NotificationIconAreaController.java--- vendor/mediatek/proprietary/packages/apps/SystemUI/src/com/android/systemui/statusbar/phone/NotificationIconAreaController.java (版本 349)vendor/mediatek/proprietary/packages/apps/SystemUI/src/com/android/systemui/statusbar/phone/NotificationIconAreaController.java (版本 353)-483,8 483,13 private void updateTintForIcon(StatusBarIconView v, int tint) {boolean isPreL Boolean.TRUE.equals(v.getTag(R.id.icon_is_pre_L));// modify {boolean enableIconColorized mContext.getResources().getBoolean(com.android.internal.R.bool.config_enable_icon_colorized);int color StatusBarIconView.NO_COLOR;
- boolean colorize !isPreL || NotificationUtils.isGrayscale(v, mContrastColorUtil);boolean colorize enableIconColorized ? (!isPreL || NotificationUtils.isGrayscale(v, mContrastColorUtil)) : false;// modify }if (colorize) {color DarkIconDispatcher.getTint(mTintAreas, v, tint);}
下拉通知栏
展开
Index: frameworks/base/core/java/android/app/Notification.java--- frameworks/base/core/java/android/app/Notification.java (版本 349)frameworks/base/core/java/android/app/Notification.java (版本 353)-6437,7 6437,12 */private void processSmallIconColor(Icon smallIcon, RemoteViews contentView,StandardTemplateParams p) {
- boolean colorable !isLegacy() || getColorUtil().isGrayscaleIcon(mContext, smallIcon);// modify {boolean enableIconColorized mContext.getResources().getBoolean(com.android.internal.R.bool.config_enable_icon_colorized);boolean colorable enableIconColorized ? (!isLegacy() || getColorUtil().isGrayscaleIcon(mContext, smallIcon)) : false;// modify }int color getSmallIconColor(p);contentView.setInt(R.id.icon, setBackgroundColor,getBackgroundColor(p));
不展开
Index: vendor/mediatek/proprietary/packages/apps/SystemUI/src/com/android/systemui/statusbar/phone/NotificationIconContainer.java--- vendor/mediatek/proprietary/packages/apps/SystemUI/src/com/android/systemui/statusbar/phone/NotificationIconContainer.java (版本 349)vendor/mediatek/proprietary/packages/apps/SystemUI/src/com/android/systemui/statusbar/phone/NotificationIconContainer.java (版本 353)-187,8 187,12 mStaticDotDiameter 2 * mStaticDotRadius;final Context themedContext new ContextThemeWrapper(getContext(),com.android.internal.R.style.Theme_DeviceDefault_DayNight);
- mThemedTextColorPrimary Utils.getColorAttr(themedContext,
- com.android.internal.R.attr.textColorPrimary).getDefaultColor();// modify {boolean enableIconColorized getResources().getBoolean(com.android.internal.R.bool.config_enable_icon_colorized);mThemedTextColorPrimary enableIconColorized ? Utils.getColorAttr(themedContext,com.android.internal.R.attr.textColorPrimary).getDefaultColor() : StatusBarIconView.NO_COLOR;// modify }}Override