如您所知,我们可以通过以下代码从xml设置windowLightStatusBar
。
<item name="android:windowLightStatusBar">true</item>
我需要通过编程方式将此属性true更改为false或false更改为true。有没有办法实现它?
答案 0 :(得分:9)
如果要更改图标颜色
,请设置此项.setSystemUiVisibility(View.SYSTEM_UI_FLAG_LIGHT_STATUS_BAR);
并重置为默认设置此
.setSystemUiVisibility(0);
但如果您想更改statusBar的背景颜色,请使用此
getWindow.setStatusBarColor(ContextCompat.getColor(activity,R.color.my_statusbar_color));
答案 1 :(得分:3)
我相信这是打开和关闭电源的正确方法。
if (on) {
View view = getWindow().getDecorView();
view.setSystemUiVisibility(view.getSystemUiVisibility() | View.SYSTEM_UI_FLAG_LIGHT_STATUS_BAR);
} else {
View view = getWindow().getDecorView();
view.setSystemUiVisibility(view.getSystemUiVisibility() & ~View.SYSTEM_UI_FLAG_LIGHT_STATUS_BAR);
}
答案 2 :(得分:2)
getWindow().getDecorView().setSystemUiVisibility(View.SYSTEM_UI_FLAG_LIGHT_STATUS_BAR);
getWindow().setStatusBarColor(Color.WHITE);
答案 3 :(得分:2)
由于 View.setSystemUiVisibility()
已从 API 30 中弃用,取而代之的是新的 WindowInsetsController
API,因此 2021 年对此 API 的回答现在是 WindowInsetsControllerCompat#setAppearanceLightStatusBars(boolean)
,它向后兼容 API 23。必需的 { {3}} 或更高版本。
WindowInsetsControllerCompat.setAppearanceLightStatusBars(true)
答案 4 :(得分:2)
Hidro 的回答几乎是正确的,但需要将 WindowInsetsControllerCompat 作为函数调用才能工作,否则它声称在我的情况下存在未解析的引用。
对于 Kotlin:
WindowInsetsControllerCompat(window, yourView).isAppearanceLightStatusBars = true
对于 Java:
WindowInsetsControllerCompat(getWindow(), yourView).setAppearanceLightStatusBars(true)
答案 5 :(得分:1)
要清除此属性,请使用以下代码:
window.clearFlags( View.SYSTEM_UI_FLAG_LIGHT_STATUS_BAR)
答案 6 :(得分:0)
只做这个
它使图标颜色变白
getWindow().getDecorView().setSystemUiVisibility(View.SYSTEM_UI_FLAG_VISIBLE);