如何在Flutter应用中不使用包添加原生闪屏并解决MIPMAP问题
Flutter 原生闪屏(兼容全Android版本+MIPMAP资源)解决方案
核心问题定位
你遇到的MIPMAP目录不生效问题,大概率是资源引用路径错误或闪屏主题配置未适配MIPMAP资源导致的,以下是一套覆盖所有Android版本(包括API 32)的完整配置流程:
1. 准备MIPMAP资源
将不同DPI尺寸的应用图标分别放入对应的android/app/src/main/res/mipmap-*目录(如mipmap-mdpi、mipmap-hdpi、mipmap-xhdpi等),确保所有图标文件名一致(例如ic_launcher.png)。
2. 创建闪屏背景布局(兼容旧版本)
在android/app/src/main/res/layout目录下新建splash_screen.xml,用于Android 11及以下版本的闪屏显示:
<?xml version="1.0" encoding="utf-8"?> <layer-list xmlns:android="http://schemas.android.com/apk/res/android"> <!-- 闪屏背景色 --> <item android:drawable="@color/splash_bg" /> <!-- 居中显示MIPMAP图标 --> <item> <bitmap android:gravity="center" android:src="@mipmap/ic_launcher" /> </item> </layer-list>
3. 配置闪屏主题(覆盖全版本)
在android/app/src/main/res/values/styles.xml中添加闪屏专属主题,同时兼容Android 12+(含API 32)和旧版本:
<!-- 闪屏主题 --> <style name="SplashTheme" parent="Theme.AppCompat.Light.NoActionBar"> <!-- Android 11及以下:指定闪屏背景布局 --> <item name="android:windowBackground">@layout/splash_screen</item> <!-- Android 12+:系统原生闪屏配置 --> <item name="android:windowSplashScreenBackground">@color/splash_bg</item> <item name="android:windowSplashScreenAnimatedIcon">@mipmap/ic_launcher</item> <item name="android:windowSplashScreenAnimationDuration">0</item> <!-- 关闭动画,直接显示静态图标 --> <!-- 通用配置:隐藏标题栏/ActionBar --> <item name="android:windowActionBar">false</item> <item name="android:windowNoTitle">true</item> <item name="android:windowFullscreen">true</item> <!-- 可选:全屏闪屏 --> </style> <!-- 应用原有主题(保持你项目的配置即可) --> <style name="AppTheme" parent="Theme.AppCompat.Light.NoActionBar"> <!-- 你的应用主题配置 --> <item name="colorPrimary">@color/primary</item> <item name="colorPrimaryDark">@color/primary_dark</item> <item name="colorAccent">@color/accent</item> </style>
4. 配置颜色资源
在android/app/src/main/res/values/colors.xml中添加闪屏背景色(根据你的需求修改色值):
<color name="splash_bg">#FFFFFF</color> <!-- 其他应用颜色资源 --> <color name="primary">#2196F3</color> <color name="primary_dark">#1976D2</color> <color name="accent">#FF4081</color>
5. 修改AndroidManifest与MainActivity
5.1 更新AndroidManifest.xml
将主Activity的默认主题替换为闪屏主题:
<activity android:name=".MainActivity" android:exported="true" android:theme="@style/SplashTheme"> <!-- 这里设置为闪屏主题 --> <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity>
5.2 切换回应用主题
打开android/app/src/main/java/[你的包名]/MainActivity.java,在onCreate方法中切换回应用主题(确保闪屏显示后恢复正常主题):
public class MainActivity extends FlutterActivity { @Override protected void onCreate(Bundle savedInstanceState) { // 先切换回应用主题,再执行父类初始化 setTheme(R.style.AppTheme); super.onCreate(savedInstanceState); } }
关键注意事项
- 所有MIPMAP资源的引用必须使用
@mipmap/xxx,不能写成@drawable/xxx,否则会无法加载MIPMAP目录下的多DPI资源。 - 若使用Kotlin编写MainActivity,逻辑与Java一致,仅语法调整即可。
- API 32属于Android 12L,上述主题配置中的
windowSplashScreen*属性已完全兼容该版本。
内容的提问来源于stack exchange,提问作者Adel Merioua
相关产品推荐
相关产品推荐

