gpt4 book ai didi

java - 在 Android 11 (API 30) 中以编程方式更改状态栏文本颜色

转载 作者:行者123 更新时间:2023-12-04 23:43:47 26 4
gpt4 key购买 nike

我目前可以更新状态栏文字 在我的基本 Activity 中使用以下颜色从浅到深:

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 上显示为已弃用,尽管已弃用的方法暂时仍将起作用,但我更愿意用更新的方法替换它们来完成此操作。我已经读到我们现在应该使用 WindowInsetsController 函数,但不清楚如何从文档中完成此操作。有人可以指出我正确的方向吗?

最佳答案

对于 API 30,您可以使用 WindowInsetsController.setSystemBarsAppearance (int appearance, int mask) :
要使状态栏亮起:

window.insetsController?.setSystemBarsAppearance(
WindowInsetsController.APPEARANCE_LIGHT_STATUS_BARS,
WindowInsetsController.APPEARANCE_LIGHT_STATUS_BARS
)
要清除标志:
window.insetsController?.setSystemBarsAppearance(
0,
WindowInsetsController.APPEARANCE_LIGHT_STATUS_BARS
)
请注意 getInsetsController可以为空,因此 ?查看。
或者(对于较低的 API),您可以使用 WindowInsetControllerCompat :
val windowInsetController = ViewCompat.getWindowInsetsController(window.decorView)
windowInsetController?.isAppearanceLightStatusBars = true // or false
注意:如果清除标志不起作用检查 window.decorView.windowSystemUiVisibility 的值- 如果它包含 View.SYSTEM_UI_FLAG_LIGHT_STATUS_BAR这意味着您的 View 层次结构包含一个带有此标志的 View ,该标志被传播并影响 systemUiVisibility计算。

关于java - 在 Android 11 (API 30) 中以编程方式更改状态栏文本颜色,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64826506/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com