应用程序不应提供自己的启动屏幕旧设备的向后兼容性如何,如何处理?有没有可以玩和测试的Codelab项目?从 Android 12 (API 31+) 开始应用程序定义的启动屏幕, 应用程序的启动屏幕由系统提供,并且 应用程序不应创建自己的应用程序,否则用户将看到两个 启动画面。请检查 SplashScreen 类以检查如何 启动画面可以控制和定制。
https://9to5google.com/2021/04/21/android-12-dp3-all-apps-now-show -加载画廊时相同的启动画面/
windowBackground
和您的启动器图标,并在您的应用程序绘制第一帧后立即关闭。您可以修改许多属性,例如背景、图标等:
https://developer.android.com/about/versions/12/features/splash-screen#set-theme
ViewTreeObserver.OnPreDrawListener
并从
viewmodel
返回进行阻塞调用。
活动:
// My Launcher Activity
class MainActivity : AppCompatActivity() {
private val viewModel : JustDelayViewModel by viewModels()
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
val content: View = findViewById(android.R.id.content)
content.viewTreeObserver.addOnPreDrawListener(
object : ViewTreeObserver.OnPreDrawListener {
override fun onPreDraw(): Boolean {
// Check if the initial data is ready.
return if (viewModel.getIsReady()) {
// The content is ready; start drawing.
content.viewTreeObserver.removeOnPreDrawListener(this)
true
} else {
// The content is not ready; suspend.
false
}
}
}
)
}
}
视图模型:
class JustDelayViewModel : ViewModel() {
fun getIsReady(): Boolean {
val result = viewModelScope.runCatching {
runBlocking {
//do some blocking call check for Firebase result or something
delay(5000)
}
true //return the result
}
return result.isSuccess
}
}
您可以阅读更多相关内容:https://developer.android.com/about/versions/12/features/splash-screen#suspend-drawing
Mayur 的答案,以支持旧设备。
需要在windowSplashScreen*
文件中添加新的
res/values-v31/style.xml
属性。然后对于旧版启动画面,它取决于应用程序的当前实现。
如果应用程序只是使用带有自定义
windowBackground
的起始主题,则无需执行任何操作,因为
windowBackground
不用于新的启动屏幕(仅当它是简单颜色时)。如果应用程序有一些可见的启动画面
Activity
,则在Android 12上将会出现双启动画面。要解决此问题,应用程序可以迁移到
windowBackground
解决方案。如果应用程序
确实需要保持其启动屏幕 Activity,它可以更新布局以匹配 Android 12 上的系统启动屏幕和/或使用 SplashScreen.setOnExitAnimationListener()
创建从系统启动屏幕到应用程序启动屏幕的平滑过渡
android {
compileSdk 31
...
}
dependencies {
...
implementation "androidx.core:core-splashscreen:1.0.1"
}
这将在style.xml
中提供启动屏幕选项,您只需为android api 31及以上版本和以下api 31之一创建2个style.xmls 1
<style name="Theme.CustomSplashScreenTheme" parent="Theme.SplashScreen">
<item name="windowSplashScreenBackground">@color/white</item>
<item name="windowSplashScreenAnimatedIcon">@drawable/logo</item>
<item name="windowSplashScreenAnimationDuration">300</item>
<item name="postSplashScreenTheme">@style/Theme.YourAppTheme</item>
</style>
使用此
<item name="android:windowIsTranslucent">true</item>
在 style.xml 文件中关闭样式标签之前。它使您的默认 Android 启动画面变得透明!