Android 12 飞溅白色背景
Android 12 splash white background
我试图添加对 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 方法,然后导航到另一个 activity。
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 没有任何主题。当我在 Splash 的主题中添加 <item name="android:windowBackground">@color/android:black</item>
时,我得到的不是白色屏幕,而是黑色屏幕。
问题是您正在 returning true
并在请求导航到您的另一个 activity 后删除 OnPreDrawListener
,这向系统表明您当前 Activity 现在可以绘制了,但下一个还不可见,因此您看到的是闪光灯。
只需在预绘制监听器中始终 return false
并在 onStop()
中将其删除
我试图添加对 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 方法,然后导航到另一个 activity。
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 没有任何主题。当我在 Splash 的主题中添加 <item name="android:windowBackground">@color/android:black</item>
时,我得到的不是白色屏幕,而是黑色屏幕。
问题是您正在 returning true
并在请求导航到您的另一个 activity 后删除 OnPreDrawListener
,这向系统表明您当前 Activity 现在可以绘制了,但下一个还不可见,因此您看到的是闪光灯。
只需在预绘制监听器中始终 return false
并在 onStop()