Android 10 状态栏通知图标和下拉状态栏图标为白色问题

这篇博客主要介绍了在Android 5.0及以上版本中,由于系统限制通知图标默认显示为白色的情况,以及如何通过修改系统源码来实现自定义通知栏图标的颜色,包括在`NotificationIconAreaController.java`和`Notification.java`文件中的具体代码修改方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

前言

安装第三方应用,会在状态栏上面和下拉状态栏通知图标显示白色

原因

因为google在android5.0上面做了限制,为了统一系统风格。之后的状态栏icon就不能够随便用一张色彩丰富的图片了,只能够有白色和透明两个颜色出现。5.0以上(不包含5.0),系统默认通知栏图标为系统启动图标,会自动将通知栏的图标(有色区域)全部填充为白色,像一个白色格子,这是Google 为了实现材料设计规范,特意为之。为了去除白色图标,镂空背景即可:
所以这之后的想要设置显示状态栏icon不为白色:这个icon只要背景需要透明,只让内容块纯白色。

代码路径

vendor\mediatek\proprietary\packages\apps\SystemUI\src\com\android\systemui\statusbar\phone\NotificationIconAreaController.java
frameworks\base\core\java\android\app\Notification.java

解决方法

1、在NotificationIconAreaController.java文件中,不允许系统进行着色,修改状态栏显示图标

diff --git a/vendor/mediatek/proprietary/packages/apps/SystemUI/src/com/android/systemui/statusbar/phone/NotificationIco
nAreaController.java b/vendor/mediatek/proprietary/packages/apps/SystemUI/src/com/android/systemui/statusbar/phone/Notif
icationIconAreaController.java
index f52becaf7b..c79d29e01a 100644
--- a/vendor/mediatek/proprietary/packages/apps/SystemUI/src/com/android/systemui/statusbar/phone/NotificationIconAreaCo
ntroller.java
+++ b/vendor/mediatek/proprietary/packages/apps/SystemUI/src/com/android/systemui/statusbar/phone/NotificationIconAreaCo
ntroller.java
@@ -430,7 +430,7 @@ public class NotificationIconAreaController implements DarkReceiver,
         boolean isPreL = Boolean.TRUE.equals(v.getTag(R.id.icon_is_pre_L));
         int color = StatusBarIconView.NO_COLOR;
         boolean colorize = !isPreL || NotificationUtils.isGrayscale(v, mContrastColorUtil);
-        if (colorize) {
+        if (!colorize) {
             color = DarkIconDispatcher.getTint(mTintArea, v, tint);
         }
         v.setStaticDrawableColor(color);

2、在Notification.java文件中,对下拉状态栏通知图标白色修改

--- a/frameworks/base/core/java/android/app/Notification.java
+++ b/frameworks/base/core/java/android/app/Notification.java
@@ -91,7 +91,7 @@ import com.android.internal.R;
 import com.android.internal.annotations.VisibleForTesting;
 import com.android.internal.util.ArrayUtils;
 import com.android.internal.util.ContrastColorUtil;


 import java.lang.annotation.Retention;
 import java.lang.annotation.RetentionPolicy;
 import java.lang.reflect.Constructor;
@@ -5708,6 +5708,9 @@ public class Notification implements Parcelable
             } else {
                 color = resolveContrastColor(p);
             }

+                colorable =false;

             if (colorable) {
                 contentView.setDrawableTint(R.id.icon, false, color,
                         PorterDuff.Mode.SRC_ATOP);
(END)


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值