Flutter Android端如何单独设置启动页图标不影响桌面图标
Android端Flutter启动页与桌面图标独立配置方案
问题根因
从API 29(Android 10)开始,系统前置了SplashScreen兼容逻辑,新版Flutter引擎默认会优先读取主题中配置的系统启动页属性,不再直接加载你自定义的launch_screen.xml布局。默认配置下系统启动页会直接引用mipmap目录下的桌面图标资源,同时会跟随系统图标样式做圆形/圆角裁剪,这也是之前修改mipmap下的ic_launcher会同时影响桌面和启动页、图标被裁剪模糊的核心原因。
mipmap目录本身是Android系统专门为桌面图标设计的资源目录,系统会对该目录下的资源做分辨率缩放、形状裁剪、主题适配等特殊处理,本身就不适合存放启动页展示资源。
分步配置方案
该方案完全基于Android原生启动逻辑实现,启动页在应用进程初始化、Flutter引擎加载阶段自动展示,Flutter渲染第一帧后自动消失,不需要手动配置显示时长,可自动适配不同性能设备的实际启动耗时。
- 第一步:资源隔离存放
桌面图标相关资源全部保留在原有mipmap目录下,ic_launcher、ic_launcher_round以及mipmap-anydpi-v26下的自适应图标配置完全不做修改,从资源层面保证桌面显示不受影响。
启动页专属的展示图片全部放入对应分辨率的drawable目录,禁止放入mipmap目录。 - 第二步:定义启动页背景资源
在res/drawable目录下新建launch_screen_bg.xml,配置需要的启动页展示效果,以下是全屏居中裁剪显示启动图的配置示例:
同步在<?xml version="1.0" encoding="utf-8"?> <layer-list xmlns:android="http://schemas.android.com/apk/res/android"> <item> <bitmap android:gravity="fill_horizontal|fill_vertical" android:src="@drawable/launch_screen" android:tileMode="disabled" /> </item> </layer-list>res/drawable-v29目录下新建同名同内容的launch_screen_bg.xml,覆盖API29+版本的资源加载逻辑。 - 第三步:修改启动主题配置,解耦启动页与桌面图标
打开res/values/styles.xml,找到启动Activity使用的LaunchTheme(即Manifest中为MainActivity配置的启动主题),修改为如下配置:<style name="LaunchTheme" parent="@android:style/Theme.Light.NoTitleBar"> <!-- 指定启动页展示的自定义背景 --> <item name="android:windowBackground">@drawable/launch_screen_bg</item> <!-- 屏蔽系统默认拉取桌面图标作为启动页元素的逻辑 --> <item name="android:windowSplashScreenAnimatedIcon">@null</item> <item name="android:windowSplashScreenIconBackgroundColor">@null</item> <item name="android:windowSplashScreenBrandingImage">@null</item> <!-- 关闭API29+系统对启动页内容的强制图标形状裁剪 --> <item name="android:windowOptOutEdgeToEdgeEnforcement">true</item> </style> - 第四步:校验Manifest配置
打开AndroidManifest.xml确认两个核心配置:application标签下的android:icon、android:roundIcon属性依然指向@mipmap/ic_launcher、@mipmap/ic_launcher_round,不做任何修改MainActivity的android:theme属性指向上述修改完成的LaunchTheme,和应用正常运行使用的主题做区分
注意事项
- 配置完成后需要彻底卸载测试设备上的旧版应用再重装,避免系统缓存旧的启动页资源导致配置不生效
- 如果之前集成过第三方Flutter启动页插件,需要先清理插件生成的主题、Manifest冗余配置,避免配置冲突
- 不要修改mipmap-anydpi-v26目录下的任何ic_launcher相关文件,该目录下的配置仅对桌面图标生效,修改后反而会导致桌面图标显示异常
内容的提问来源于stack exchange,提问作者under
相关产品推荐
相关产品推荐

