1

我试图添加对 Android 12 初始屏幕的支持。这是我的v31/styles.xml

<resources>

<style name="SplashTheme" parent="Theme.AppCompat.Light.NoActionBar">
    <item name="android:statusBarColor">@android:color/transparent</item>
    <item name="android:windowFullscreen">true</item>
    <item name="android:navigationBarColor">@android:color/transparent</item>
    <item name="android:windowSplashScreenAnimatedIcon">@drawable/ic_launcher_foreground</item>
    <item name="android:windowSplashScreenIconBackgroundColor">#FF3044</item>
    <item name="android:windowSplashScreenBackground">#FF3044</item>
</style>

</resources>

新的飞溅后,我可以看到白屏。那个白屏是,android:windowBackground但如果我试图将它设置为@null,我会在白屏的地方得到倒置的飞溅。飞溅后如何去除白色背景?我猜 Splash API 旨在替换 windowBackground。

App flow -> SplashActivity(带有提到的主题),然后我使用 ViewModel 暂停 preDraw 方法,然后导航到另一个活动。

SplashActivity.kt -onCreate()

val content: View = findViewById(android.R.id.content)
    content.viewTreeObserver.addOnPreDrawListener(
        object : ViewTreeObserver.OnPreDrawListener {
            override fun onPreDraw(): Boolean {
                return if (viewModel.appInit()) {
                    navigateToHome()
                    content.viewTreeObserver.removeOnPreDrawListener(this)
                    true
                } else {
                    false
                }
            }
        }
    )

HomeActivity 没有任何主题。当我添加<item name="android:windowBackground">@color/android:black</item>Splash 的主题时,我得到的是黑色的,而不是白屏。

4

1 回答 1

1

问题是您在请求导航到您的其他活动后返回true并删除OnPreDrawListener它,这向系统表明您当前的活动现在已准备好绘制,但下一个活动尚不可见,因此您看到的闪光灯.

只需始终返回false预绘制侦听器并将其删除onStop()

于 2021-07-02T14:19:28.847 回答