Flutter启动屏仅部分设备正常显示,寻求技术排查方案
Android Flutter启动屏兼容问题解决
期望实现的启动屏

已完成的实现步骤
- 在
android/app/src/main/res/drawable目录下添加启动屏图片launch_image.png和渐变背景文件gradient_background.xml - 在
android/app/src/main/res/values目录下创建colors.xml文件,存储启动屏颜色:
<?xml version="1.0" encoding="utf-8"?> <resources> <color name='gradientStartColor'>#68CDF6</color> <color name='gradientEndColor'>#80D325</color> </resources>
- 编写
gradient_background.xml代码:
<?xml version="1.0" encoding="utf-8"?> <shape xmlns:android="http://schemas.android.com/apk/res/android" android:shape="rectangle"> <gradient android:startColor="@color/gradientStartColor" android:endColor="@color/gradientEndColor" android:angle="135" /> </shape>
- 修改
launch_background.xml代码:
<?xml version="1.0" encoding="utf-8"?> <layer-list xmlns:android="http://schemas.android.com/apk/res/android"> <item android:drawable="@drawable/gradient_background"/> <item> <bitmap android:gravity="center" android:src="@drawable/launch_image" /> </item> </layer-list>
遇到的问题
项目中存在drawable和drawable-v21两个目录,已将前者内容复制到后者,但不清楚该目录作用。启动屏在红米Note 8 Pro真机上正常显示,但在Pixel3a模拟器中显示绿色背景加Flutter默认图标:
解决方法
1. 明确drawable-v21目录作用
drawable-v21是针对Android 5.0(API等级21)及以上版本的资源目录,系统会优先加载对应API等级目录下的资源。你的模拟器属于API21+,会优先读取drawable-v21下的launch_background.xml,如果该文件未正确配置,就会显示异常。
2. 统一资源配置
- 最简方案:直接删除
drawable-v21目录下的launch_background.xml,让所有版本的系统都使用drawable目录下的通用配置,避免版本差异导致的资源加载不一致。 - 若需保留
drawable-v21:必须确保该目录下的launch_background.xml、gradient_background.xml和launch_image.png与drawable目录下的内容完全一致,资源引用路径不能出错。
3. 清理并重建项目
执行以下命令清理缓存并重新运行项目,确保模拟器加载最新的资源:
flutter clean flutter run
内容的提问来源于stack exchange,提问作者Mikelenjilo
相关产品推荐
相关产品推荐

