在Android 13中,动态颜色被引入作为一种改变应用程序主题颜色的简便方法。但是,当一个应用程序正在显示对话框时,如果用户旋转屏幕或其他配置更改导致活动重新启动,应用程序可能会崩溃。
为了解决这个问题,可以添加以下代码到应用程序的主Activity中:
override fun onConfigurationChanged(newConfig: Configuration) {
super.onConfigurationChanged(newConfig)
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.S) {
val dynamicColors = WindowInsetsController.APPEARANCE_LIGHT_NAVIGATION_BARS
window.decorView.windowInsetsController?.setSystemBarsAppearance(
dynamicColors, dynamicColors
)
}
}
这个代码段在屏幕方向更改或其他配置更改时触发,然后通过设置WindowInsetsController的动态颜色来防止应用程序崩溃。使用这种方法可以使应用程序在显示对话框时保持稳定,并允许用户进行其他配置更改而不会导致崩溃。