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

Android 12 Splash API设备旋转时状态栏下方显示白色背景问题解决方案咨询

解决Android 12 Splash API旋转时状态栏下方白色背景问题

这个问题我之前也碰到过,核心原因是Activity默认窗口背景为白色,加上旋转重建时Fragment加载有短暂延迟,SplashScreen的白色背景和后续页面的蓝色背景衔接出现了空档,就露出了状态栏下方的白色区域。结合你的代码,给你两个针对性的解决方案:

方案一:修改应用主题,统一窗口背景与Fragment颜色

在themes.xml的主应用主题Theme.AAAAccountsKotlin中添加android:windowBackground属性,让Activity的默认背景和Fragment的@color/logo_blue保持一致:

<style name="Theme.AAAAccountsKotlin" parent="Theme.MaterialComponents.DayNight.NoActionBar">
    <!-- 保留原有属性 -->
    <item name="colorPrimary">@color/logo_blue</item>
    <item name="android:statusBarColor" tools:targetApi="l">@color/logo_blue</item>
    <!-- 添加这一行,设置窗口背景为蓝色 -->
    <item name="android:windowBackground">@color/logo_blue</item>
    <!-- 其他自定义属性 -->
</style>

这样不管是Activity启动还是旋转重建,在Fragment加载完成前,Activity背景都会是蓝色,不会露出白色,完美衔接Splash和页面的视觉效果。

方案二:优化SplashScreen的显示时机(可选)

如果不想修改全局窗口背景,也可以控制SplashScreen直到Fragment完全加载后再消失。修改MainActivity.kt代码:

@AndroidEntryPoint
class MainActivity : AppCompatActivity() {
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        // 初始化SplashScreen并设置保持显示的条件
        val splashScreen = installSplashScreen()
        // 监听Fragment加载状态,确保DashboardFragment显示后再隐藏Splash
        splashScreen.setKeepOnScreenCondition {
            val navHost = supportFragmentManager.findFragmentById(R.id.nav_host_fragment) as? NavHostFragment
            // 当当前目的地不是DashboardFragment时,保持Splash显示
            navHost?.navController?.currentDestination?.id != R.id.dashboardFragment
        }
        setContentView(R.layout.activity_main)
    }
}

这个方法会让SplashScreen持续显示,直到你的DashboardFragment完全加载完成,避免中间出现白色背景的空档期。注意不要让条件永远为true,否则Splash会一直停留在界面上。

验证效果

修改完成后,旋转设备时状态栏下方区域会直接显示蓝色(和Fragment背景一致),不会再出现白色背景的问题。


内容的提问来源于stack exchange,提问作者Saify

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.27 20:42:47