【发布时间】:2021-09-10 10:44:06
【问题描述】:
我试图添加对 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 没有任何主题。当我在 Splash 的主题中添加 <item name="android:windowBackground">@color/android:black</item> 时,我得到的不是白屏,而是黑屏。
【问题讨论】:
-
您是否看到分配给启动画面的颜色?如果是,并且之后出现白色闪烁,则您可能有另一个活动开始,或者您可能设置了另一个主题。如果您也分享您的 Activity 代码会有所帮助。
-
是的,如果我将 windowsBackground 设置为上述样式,那么我可以看到该颜色而不是白色。在此之前我也可以看到启动背景和图标。流程是这样的 - SplashActivity(带有提到的主题)然后我暂停 preDraw 方法并导航到另一个活动。
-
我的猜测是白色闪烁你的第二个活动的窗口背景
-
不,这不可能是因为当我将 windowsBackground 作为黑色添加到 SplashActivity 的主题时,它会替换白色背景。
-
您说您导航到第二个活动。我认为第二个活动具有白色背景,除非您还为第二个活动设置相同的主题。也许粘贴您的 manifest.xml 和活动的代码来帮助我们找到问题。
标签: android splash-screen beta android-12