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

如何实现Google Play应用图标随深浅主题切换背景颜色

效果示例

  • 浅色模式图标:
    Light mode icon
  • 深色模式图标:
    Dark mode icon

可行实现方案

该效果分两种场景,对应不同的实现逻辑:

方案1:Google Play商店展示图标适配

针对Play商店列表、详情页的展示图标效果,无需修改应用代码,直接在开发者后台配置即可:

  • 登录Google Play开发者控制台,进入对应应用的「商店呈现」设置页
  • 在图标上传区域,分别上传浅色模式、深色模式两套展示图标
  • 提交审核生效后,Google Play客户端会自动根据用户系统当前的主题状态,展示对应版本的图标

方案2:桌面启动器图标适配(Android 8.0+ 官方推荐)

针对用户安装后桌面显示的启动器图标,使用安卓官方自适应图标特性实现,无需额外编写业务代码,系统自动处理切换逻辑:

  1. 在res/values目录下的colors.xml中定义浅色模式下的图标背景色:
<color name="launcher_icon_bg">#FFFFFF</color>
  1. 新建res/values-night目录,在目录下新建同名colors.xml,定义深色模式下的同名字段:
<color name="launcher_icon_bg">#121212</color>
  1. 在res/mipmap-anydpi-v26目录下的自适应图标配置文件(通常命名为ic_launcher.xml)中,将背景层资源指向刚才定义的颜色:
<adaptive-icon xmlns:android="http://schemas.android.com/apk/res/android">
    <background android:drawable="@color/launcher_icon_bg" />
    <foreground android:drawable="@mipmap/ic_launcher_foreground" />
</adaptive-icon>

系统会自动根据当前主题加载对应的颜色值,实现图标背景随主题切换。

方案3:全版本通用自定义图标切换

如果需要适配Android 8.0以下版本,或者需要同时切换图标的前景样式,可以通过动态切换Activity别名实现:

  1. 提前准备好浅色、深色两套完整的图标资源,放到对应mipmap目录下
  2. 在AndroidManifest.xml中注册两个指向主启动Activity的activity-alias,分别配置不同的图标属性,默认启用浅色模式的别名:
<activity-alias
    android:name=".MainActivityLight"
    android:enabled="true"
    android:icon="@mipmap/ic_launcher_light"
    android:targetActivity=".MainActivity">
    <intent-filter>
        <action android:name="android.intent.action.MAIN" />
        <category android:name="android.intent.category.LAUNCHER" />
    </intent-filter>
</activity-alias>
<activity-alias
    android:name=".MainActivityDark"
    android:enabled="false"
    android:icon="@mipmap/ic_launcher_dark"
    android:targetActivity=".MainActivity">
    <intent-filter>
        <action android:name="android.intent.action.MAIN" />
        <category android:name="android.intent.category.LAUNCHER" />
    </intent-filter>
</activity-alias>
  1. 重写Application或者主Activity的onConfigurationChanged方法,监听系统主题变化:
@Override
public void onConfigurationChanged(Configuration newConfig) {
    super.onConfigurationChanged(newConfig);
    int nightMode = newConfig.uiMode & Configuration.UI_MODE_NIGHT_MASK;
    boolean isDarkMode = nightMode == Configuration.UI_MODE_NIGHT_YES;
    updateLauncherIcon(isDarkMode);
}
  1. 实现updateLauncherIcon方法,通过PackageManager动态切换启用的别名:
private void updateLauncherIcon(boolean isDarkMode) {
    PackageManager pm = getPackageManager();
    // 启用对应模式的别名,禁用另一个
    pm.setComponentEnabledSetting(
        new ComponentName(this, "com.your.package.MainActivityLight"),
        isDarkMode ? PackageManager.COMPONENT_ENABLED_STATE_DISABLED : PackageManager.COMPONENT_ENABLED_STATE_ENABLED,
        PackageManager.DONT_KILL_APP
    );
    pm.setComponentEnabledSetting(
        new ComponentName(this, "com.your.package.MainActivityDark"),
        isDarkMode ? PackageManager.COMPONENT_ENABLED_STATE_ENABLED : PackageManager.COMPONENT_ENABLED_STATE_DISABLED,
        PackageManager.DONT_KILL_APP
    );
}

注意:部分第三方桌面启动器存在图标缓存,切换后可能需要几秒到几十秒才会刷新显示。


内容的提问来源于stack exchange,提问作者Omar Abo Esmail

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 06:48:03