以编程方式设置windowlightstatusbar属性

时间:2017-03-14 15:14:49

标签: android android-statusbar

如您所知,我们可以通过以下代码从xml设置windowLightStatusBar

<item name="android:windowLightStatusBar">true</item>

我需要通过编程方式将此属性true更改为false或false更改为true。有没有办法实现它?

7 个答案:

答案 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);