Flutter如何将SVG格式文件设置为应用启动页(Splash Screen)?
问题原因
- 原生启动阶段的系统限制:Android冷启动初期尚未加载应用的完整运行环境,对矢量资源的支持存在版本兼容问题:Android 5.0以下默认不支持VectorDrawable,部分厂商的定制ROM在启动阶段也存在矢量图加载异常的问题。
- 第三方库的兼容策略:splash_screen_view、flutter_native_splash这类库为了保证全平台全版本的兼容性,底层默认仅适配了PNG、JPG这类通用位图格式,未做矢量资源的兼容处理。
- 配置语法错误:你当前
launch_background.xml中引用资源的写法@drawable:splashscreen存在语法错误,正确写法应为@drawable/splashscreen,这个错误会直接导致资源加载失败。
可行实现方案
方案1:原生层VectorDrawable兼容方案(仅Android端)
适合需要纯原生启动、不需要额外Flutter侧逻辑的场景:
- 先通过Android Studio自带的Vector Asset工具,将SVG文件导入生成标准的VectorDrawable格式XML文件,放入
android/app/src/main/res/drawable目录,命名为splash_logo.xml。 - 修正
launch_background.xml的配置:
<?xml version="1.0" encoding="utf-8"?> <layer-list xmlns:android="http://schemas.android.com/apk/res/android"> <item android:drawable="@android:color/black" /> <item android:drawable="@drawable/splash_logo" android:gravity="center" android:width="200dp" android:height="200dp" /> </layer-list>
- 在
android/app/src/main/res/values/styles.xml的splashScreenTheme样式中添加矢量图兼容配置:
<style name="splashScreenTheme" parent="Theme.AppCompat.NoActionBar"> <item name="android:windowBackground">@drawable/launch_background</item> <item name="vectorDrawables.useSupportLibrary">true</item> </style>
- 若需要兼容Android 4.4及更低版本,可以通过Android Studio的Vector Asset工具自动生成对应分辨率的PNG位图,放入对应dpi的资源目录做兜底即可。
方案2:双阶段启动页方案(全平台通用,支持iOS)
适合追求SVG效果一致性、不需要严格纯原生启动的场景,也是目前Flutter应用使用SVG启动页的主流方案:
- 原生层仅设置纯色背景作为启动过渡,删除AndroidManifest中
io.flutter.embedding.android.SplashScreenDrawable的meta-data配置,避免原生层加载异常。 - Flutter引擎初始化完成后,立刻在Flutter侧使用
flutter_svg库加载SVG格式的启动页,等业务侧初始化逻辑(如权限申请、配置拉取等)完成后,再关闭启动页跳转至首页。 - 该方案完全规避了原生平台的矢量图兼容问题,还可以轻松实现启动页动画效果,适配所有系统版本。
内容的提问来源于stack exchange,提问作者Marius Atasiei
相关产品推荐
相关产品推荐

