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

前言

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

原因

因为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)


  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 我可以回答这个问题Android状态栏图标可以折叠,通常在状态栏没有足够空间容纳所有图标的情况下,系统会将一些图标进行折叠,然后通过下拉通知栏的方式展示。用户也可以通过调整状态栏图标顺序来控制哪些图标会被折叠。 ### 回答2: Android状态栏图标的折叠是指当系统通知栏处于展开状态时,状态栏上的图标会被隐藏或压缩,以给用户更多的空间显示通知内容。一般情况下,状态栏图标会以常规的样式显示在状态栏上,例如网络信号强度、电池电量等。但当用户下拉通知栏时,状态栏会展开,显示更多的通知内容,这时状态栏图标就有可能被折叠。折叠的方式有两种: 1. 隐藏图标:有些状态栏图标在展开状态下没有意义或者重复显示,因此系统会将其隐藏,以免占据过多的空间。隐身状态下被折叠的图标会以小型隐藏的形式显示在状态栏上,例如铃声模式、定时器等。 2. 压缩图标:一些状态栏图标可能在展开状态下需要保持显示,但由于空间限制,系统会将其压缩成小型图标。压缩后的图标会以更简单的样式显示在状态栏上,例如手机信号强度、WLAN信号强度等。 折叠的状态栏图标能够为用户提供更好的通知体验。它使得用户在展开状态栏查看通知内容时,能够更清晰地看到重要的信息,而不会被过多的图标干扰。同时,折叠图标也有助于提高状态栏的美观性和整洁度。无论是隐藏还是压缩,Android状态栏图标的折叠机制都是为了更好地满足用户的需求与体验,提供更好的用户界面。 ### 回答3: Android 状态栏图标的折叠是指在一些情况下,部分状态栏图标可能会被隐藏或折叠起来,以节省屏幕空间或提供更多的可视区域。 折叠状态栏图标最常见的情况是当通知栏中存在较多通知时,系统会将相似的通知进行折叠,只显示一条概要通知,并在图标上显示一个数字,表示未读通知的数量。例如,当收到5条相同类型的通知时,状态栏图标上可能只显示一个图标,旁边有数字“5”。用户可以下滑通知栏以展开和查看所有通知。 此外,当通知栏中显示的通知被清除或者用户已读通知后,状态栏图标也会相应地进行折叠,只显示当前活动的通知,以减少图标的占用空间。 其他一些情况下,系统也会根据需要折叠状态栏图标,例如在屏幕上同时显示多个图标时,为了保持屏幕整洁和提供更多的可视区域,系统可能会对一些图标进行折叠。 折叠状态栏图标是一种Android系统为了提高用户体验和优化屏幕空间利用率而采取的设计。用户可以通过下拉通知栏来展开和查看具体的通知内容,同时也能更方便地管理和操作通知

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值