Android 12上Flutter启动页显示双Logo的问题求助
Android 12 启动出现两次闪屏的解决思路
Android 12(API 31)引入了SplashScreen API,系统会默认生成一个包含应用图标的闪屏页。如果你的旧闪屏配置未适配这个新机制,就会出现「系统默认小图标闪屏」→「自定义正常闪屏」的两次显示问题。
以下是两种可行的解决思路:
方案一:适配官方SplashScreen API(推荐)
这是Android 12+官方推荐的闪屏实现方式,能统一各版本的闪屏体验:
- 升级编译版本:将
build.gradle中的compileSdkVersion和targetSdkVersion设置为31及以上 - 定义闪屏主题:在
res/values-v31/styles.xml(或全局styles.xml)中添加闪屏主题:
<style name="SplashTheme" parent="Theme.SplashScreen"> <!-- 闪屏背景色,与原有自定义闪屏背景一致 --> <item name="android:windowBackground">@color/splash_bg</item> <!-- 设置闪屏显示的图标,替换为你的启动页Logo --> <item name="windowSplashScreenAnimatedIcon">@drawable/your_splash_logo</item> <!-- 可选:设置图标的背景色,避免图标与背景冲突 --> <item name="windowSplashScreenIconBackgroundColor">@color/logo_bg</item> <!-- 设置闪屏结束后切换到的应用主题 --> <item name="postSplashScreenTheme">@style/AppTheme</item> </style>
- 配置启动Activity:在
AndroidManifest.xml中,把启动Activity的theme设置为上述SplashTheme:
<activity android:name=".SplashActivity" android:theme="@style/SplashTheme"> <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity>
- 启动Activity代码调整:在
SplashActivity的onCreate方法中,先调用installSplashScreen()再加载布局:
@Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); // 初始化官方闪屏 SplashScreen splashScreen = SplashScreen.installSplashScreen(this); setContentView(R.layout.activity_splash); // 可选:如果需要等待数据加载再关闭闪屏,可设置保留条件 // splashScreen.setKeepOnScreenCondition(() -> isDataLoading); }
方案二:禁用系统默认闪屏(保留旧实现)
如果不想改动原有闪屏逻辑,可通过配置禁用Android 12+的默认闪屏:
- 针对Android 12+定义主题:在
res/values-v31/styles.xml中添加如下主题:
<style name="SplashTheme" parent="AppTheme"> <!-- 保留原有闪屏的windowBackground配置 --> <item name="android:windowBackground">@drawable/your_old_splash_drawable</item> <!-- 禁用系统默认闪屏图标 --> <item name="android:windowSplashScreenAnimatedIcon">@null</item> <!-- 禁用系统默认闪屏背景 --> <item name="android:windowSplashScreenBackground">@null</item> </style>
- 替换启动Activity主题:将
AndroidManifest.xml中启动Activity的theme替换为上述SplashTheme即可。
额外检查点
- 确认原有闪屏是否通过
windowBackground实现(而非单独Activity中放置ImageView),后者在Android 12+更易出现两次闪屏问题 - 检查是否存在多版本
styles.xml(如values-v21、values-v31)的配置冲突,确保Android 12+使用的主题配置正确
内容的提问来源于stack exchange,提问作者Nicolas Zein
相关产品推荐
相关产品推荐

