Java 在Android 11(API 30)中以编程方式更改状态栏文本颜色
我目前可以在我的基本活动中使用以下工具将状态栏的颜色从浅到深更新为文本:Java 在Android 11(API 30)中以编程方式更改状态栏文本颜色,java,android,kotlin,android-theme,android-statusbar,Java,Android,Kotlin,Android Theme,Android Statusbar,我目前可以在我的基本活动中使用以下工具将状态栏的颜色从浅到深更新为文本: private fun toggleStatusBarTextColor(light: Boolean) { // clear any existing flags window.decorView.systemUiVisibility = View.SYSTEM_UI_FLAG_VISIBLE; if(light) { window.decorView.systemUiVisibi
private fun toggleStatusBarTextColor(light: Boolean) {
// clear any existing flags
window.decorView.systemUiVisibility = View.SYSTEM_UI_FLAG_VISIBLE;
if(light) {
window.decorView.systemUiVisibility = (View.SYSTEM_UI_FLAG_LAYOUT_STABLE or View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN)
} else {
window.decorView.systemUiVisibility = (View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN or View.SYSTEM_UI_FLAG_LIGHT_STATUS_BAR)
}
}
systemUiVisibility现在在API 30上显示为已弃用,尽管弃用的方法暂时仍能正常工作,但我更愿意用更新的方法来替代它们。我已经读到,我们现在应该使用WindowInsetController函数,但不清楚如何从文档中实现这一点。有人能给我指出正确的方向吗?对于API 30,您可以使用:
要使状态栏变亮,请执行以下操作:
window.insetsController?.setSystemBarsAppearance(
WindowInsetsController.APPEARANCE_LIGHT_STATUS_BARS,
WindowInsetsController.APPEARANCE_LIGHT_STATUS_BARS
)
清除旗帜:
window.insetsController?.setSystemBarsAppearance(
0,
WindowInsetsController.APPEARANCE_LIGHT_STATUS_BARS
)
请注意,GetInsetController
可为空,因此检查?
或者(对于较低的API),您可以使用:
注意:如果清除标志不起作用,请检查-的值,如果它包含
View.SYSTEM\u UI\u flag\u LIGHT\u STATUS\u BAR
,这意味着您的视图层次结构包含一个带有此标志的视图,该标志被传播并影响systemui可见性
计算。清除标志不适用于meCan't set text white colored
val windowInsetController = ViewCompat.getWindowInsetsController(window.decorView)
windowInsetController?.isAppearanceLightStatusBars = true // or false