在android 11(api 30)中以编程方式更改状态栏文本颜色

kr98yfug  于 2021-07-06  发布在  Java
关注(0)|答案(1)|浏览(805)

我目前可以在我的基本活动中使用以下工具将状态栏文本颜色从浅色更新为深色:

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上显示为已弃用,虽然弃用的方法暂时仍能正常工作,但我更愿意用更新的方法来替换它们。我已经读到,我们现在应该使用windowinsetscoller函数,但不清楚如何从文档中实现这一点。有人能给我指出正确的方向吗?

d5vmydt9

d5vmydt91#

使用 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 因此 ? 检查。
当然,您还必须明确检查 if(Build.VERSION.SDK_INT >= 30) 因为旧版本不支持此api。

相关问题