以编程方式设置windowlightstatusbar属性

Ali*_*lli 8 android android-statusbar

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

<item name="android:windowLightStatusBar">true</item>
Run Code Online (Sandbox Code Playgroud)

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

Eli*_*zel 14

如果要更改图标颜色,请设置此项

.setSystemUiVisibility(View.SYSTEM_UI_FLAG_LIGHT_STATUS_??BAR);
Run Code Online (Sandbox Code Playgroud)

并重置为默认设置此项

.setSystemUiVisibility(0);
Run Code Online (Sandbox Code Playgroud)

但是如果你想改变statusBar的背景颜色,请使用它

getWindow.setStatusBarColor(ContextCompat.getColor(activity,R.color.my_statusbar_color));
Run Code Online (Sandbox Code Playgroud)

  • .setSystemUiVisibility(0); 测试这个 (2认同)

小智 13

Hidro 的答案几乎是正确的,但 WindowInsetsControllerCompat 需要作为函数调用才能工作,否则它声称在我的情况下存在未解析的引用。

对于科特林:

WindowInsetsControllerCompat(window, yourView).isAppearanceLightStatusBars = true
Run Code Online (Sandbox Code Playgroud)

对于Java:

WindowInsetsControllerCompat(getWindow(), yourView).setAppearanceLightStatusBars(true)
Run Code Online (Sandbox Code Playgroud)

  • `yourView` 可以是 `WindowInsetsControllerCompat(window, window.decorView)` (3认同)
  • 如果你在样式中设置了`android:windowLightStatusBar`,这将不起作用。您需要调用已弃用的函数来禁用系统 UI 标志。 (2认同)

Pha*_*inh 7

implementation "androidx.core:core-ktx:1.6.0"
Run Code Online (Sandbox Code Playgroud)

活动

class MainActivity : AppCompatActivity() {
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)

        WindowInsetsControllerCompat(window, window.decorView).isAppearanceLightStatusBars = true
    }
}
Run Code Online (Sandbox Code Playgroud)

在 Android 8 和 Android 12 上测试。运行良好


Lic*_*ius 6

要清除此属性,请使用以下代码:

window.clearFlags( View.SYSTEM_UI_FLAG_LIGHT_STATUS_BAR)
Run Code Online (Sandbox Code Playgroud)


Che*_*eng 6

我相信这是打开和关闭的正确方法。

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);
}
Run Code Online (Sandbox Code Playgroud)