You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

通知开发问题:根据Activity主题动态修改通知小图标颜色

解决通知SmallIcon动态适配状态栏/主题颜色的问题

嘿,我懂你现在的烦恼——想让通知的小图标跟着状态栏颜色或者Activity主题自动变色,但用了白色透明图标后,不管怎么调整都始终显示白色对吧?我给你分享几个靠谱的解决方案:

1. 官方推荐:使用自适应图标(Android 8.0+)

从Android 8.0(API 26)开始,系统支持自适应通知图标,这是最省心的方案,系统会自动根据状态栏的明暗主题调整图标的颜色。

步骤:

  • 在res/drawable目录下创建一个自适应图标XML文件,比如ic_adaptive_notification.xml:
<adaptive-icon xmlns:android="http://schemas.android.com/apk/res/android">
    <background android:drawable="@android:color/transparent" />
    <foreground android:drawable="@drawable/white_logo" />
</adaptive-icon>
  • 确保你的white_logo是白色矢量图(.xml)或者透明背景的PNG,没有额外的颜色滤镜。
  • 然后在构建通知时使用这个自适应图标:
NotificationCompat.Builder mBuilder = new NotificationCompat.Builder(context, "notification")
    .setSmallIcon(R.drawable.ic_adaptive_notification) // 替换为自适应图标
    .setContent(contentView)
    .setOngoing(true)
    .setContentIntent(contentIntent);
  • 注意:你的App的targetSdkVersion需要设置为26或更高,这样系统才能正确识别自适应图标。

2. 兼容低版本(API <26):手动判断主题切换图标

对于Android 8.0以下的设备,系统不支持自适应图标,这时候我们可以手动判断当前主题的明暗模式,切换对应的图标资源。

实现代码:

// 获取当前主题的夜间模式状态
int nightMode = context.getResources().getConfiguration().uiMode & Configuration.UI_MODE_NIGHT_MASK;
boolean isDarkTheme = nightMode == Configuration.UI_MODE_NIGHT_YES;

// 根据主题选择对应颜色的图标(比如暗色主题用白色,亮色主题用黑色)
int iconRes = isDarkTheme ? R.drawable.white_logo : R.drawable.black_logo;

// 构建通知
NotificationCompat.Builder mBuilder = new NotificationCompat.Builder(context, "notification")
    .setSmallIcon(iconRes)
    .setContent(contentView)
    .setOngoing(true)
    .setContentIntent(contentIntent);

如果你的项目使用AndroidX,也可以用AppCompatDelegate.getDefaultNightMode()来获取更准确的夜间模式状态:

int nightMode = AppCompatDelegate.getDefaultNightMode();
boolean isDarkTheme = nightMode == AppCompatDelegate.MODE_NIGHT_YES;

额外注意事项

  • 不要给图标设置固定的tint属性,否则会覆盖系统的自动颜色调整。
  • 确保你的图标是单色调的(比如纯黑或纯白),这样系统的颜色适配效果才会理想。

内容的提问来源于stack exchange,提问作者Tarlan Ahad

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.15 04:08:54