android 5.0以上通知栏、状态栏图标变成白色

it2022-05-06  3

在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:

android/platform_frameworks_base · 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通知栏微技巧,那些你所没关注过的小细节

转载于:https://www.cnblogs.com/CharlesGrant/p/5600492.html


最新回复(0)