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

如何在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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.12 23:45:35