zoukankan      html  css  js  c++  java
  • android 5.0以上通知栏、状态栏图标变成白色

    在5.0以上的系统上发现,平常的自定义notification出来的icon,居然在状态栏上变成了纯白色的icon。

    看源代码会发现:

     1 protected void applyColorsAndBackgrounds(StatusBarNotification sbn,
     2             NotificationData.Entry entry) {
     3 
     4         if (entry.expanded.getId() != com.android.internal.R.id.status_bar_latest_event_content) {
     5             // Using custom RemoteViews
     6             if (entry.targetSdk >= Build.VERSION_CODES.GINGERBREAD
     7                     && entry.targetSdk < Build.VERSION_CODES.LOLLIPOP) {
     8                 entry.row.setShowingLegacyBackground(true);
     9                 entry.legacy = true;
    10             }
    11         } else {
    12             // Using platform templates
    13             final int color = sbn.getNotification().color;
    14             if (isMediaNotification(entry)) {
    15                 entry.row.setTintColor(color == Notification.COLOR_DEFAULT
    16                         ? mContext.getResources().getColor(
    17                                 R.color.notification_material_background_media_default_color)
    18                         : color);
    19             }
    20         }
    21 
    22         if (entry.icon != null) {
    23             if (entry.targetSdk >= Build.VERSION_CODES.LOLLIPOP) {
    24                 entry.icon.setColorFilter(mContext.getResources().getColor(android.R.color.white));
    25             } else {
    26                 entry.icon.setColorFilter(null);
    27             }
    28         }
    29     }

    github:

     
    因为google在android5.0上面做了限制,为了统一系统风格。之后的状态栏icon就不能够随便用一张色彩丰富的图片了,只能够有白色和透明两个颜色出现。
    5.0以上(不包含5.0),系统默认通知栏图标为系统启动图标,会自动将通知栏的图标(有色区域)全部填充为白色,
    像一个白色格子,这是Google 为了实现材料设计规范,特意为之。为了去除白色图标,镂空背景即可:
    所以这之后的想要设置显示状态栏icon不为白色:这个icon只要背景需要透明,只让内容块纯白色。
    另类的解决办法:(不推荐)
    可以通过降低targetSdkVersion的方法,来达到显示彩色icon,但是不支持降低targetSdkVersion的方法。
    (就是把AndroidManifest.xml uses-sdk节点的targetSdkVersion属性设置为21以下(不含21))
     
    但是为了兼容5.0以下还正常使用:
    我们判断下就可以分别设置setSmallIcon
    1 // 5.0
    2         if(android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.LOLLIPOP){
    3             notificationBuilder.setSmallIcon(R.drawable.ic_aphla_logo);
    4         } else {
    5             notificationBuilder.setSmallIcon(R.drawable.ic_logo);
    6         }

    setLargeIcon 正常使用,不需要特别处理。使用旧的icon图片即可。

    因为smallicon已经是透明,或者白色了,这时可以设置:
    notificationBuilder.setColor();

    然后就有背景颜色在通知栏上了。

    介绍:

    Android通知栏微技巧,那些你所没关注过的小细节
  • 相关阅读:
    集训第五周动态规划 G题 回文串
    集训第五周动态规划 F题 最大子矩阵和
    集训第五周动态规划 E题 LIS
    集训第五周动态规划 D题 LCS
    集训第五周动态规划 C题 编辑距离
    集训第五周 动态规划 B题LIS
    集训第五周 动态规划 最大子段和
    防线问题
    P2486 [SDOI2011]染色
    P2146 [NOI2015]软件包管理器
  • 原文地址:https://www.cnblogs.com/CharlesGrant/p/5600492.html
Copyright © 2011-2022 走看看