Android M光明和黑暗的状态栏编程 – 如何使它再次黑暗?

在Android M中,我们有能力使状态栏图标变暗。 要做到这一点,我们可以在主题的xml中指定属性:

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

或者我们用这个代码在运行时设置它:

 View someView = findViewById(R.id.some_view); if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) { someView.setSystemUiVisibility(someView.getSystemUiVisibility() | View.SYSTEM_UI_FLAG_LIGHT_STATUS_BAR); } 

而且它实际上工作正常。 但问题是如何在运行时正确设置状态栏模式为黑暗?

我已经尝试过这些变体:

 // Makes status bar mode dark, but also hides it along with all navigation views. someView.setSystemUiVisibility(someView.getSystemUiVisibility() | ~View.SYSTEM_UI_FLAG_LIGHT_STATUS_BAR); // Does nothing someView.setSystemUiVisibility(someView.getSystemUiVisibility() & ~View.SYSTEM_UI_FLAG_LIGHT_STATUS_BAR); // Also does nothing someView.setSystemUiVisibility(someView.getSystemUiVisibility() ^ View.SYSTEM_UI_FLAG_LIGHT_STATUS_BAR); 

那么怎样才能以正确的方式来完成呢?

@Aracem发布的解决scheme是有效的,但是,如果您尝试更改状态栏的背景颜色 ,则不起作用。 在我的情况下,我以下面的方式做。

启用windowLightStatusBar(以编程方式,例如在Utils类中):

  public static void setLightStatusBar(View view,Activity activity){ if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) { int flags = view.getSystemUiVisibility(); flags |= View.SYSTEM_UI_FLAG_LIGHT_STATUS_BAR; view.setSystemUiVisibility(flags); activity.getWindow().setStatusBarColor(Color.WHITE); } } 

要将StatusBar恢复到以前的状态:

  public static void clearLightStatusBar(Activity activity,View view) { if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) { Window window = activity.getWindow(); window.setStatusBarColor(ContextCompat .getColor(activity,R.color.colorPrimaryDark)); } } 

恢复状态栏的颜色就足够了,还可以恢复图标的颜色。 非常重要:直到在setLightStatusBar(View view ..)中使用的视图从屏幕消失(即view.getVisibility()== GONE | INVISIBLE)之后,恢复操作才会发生。

根据尼克·布彻的“格子”

 public static void clearLightStatusBar(@NonNull View view) { if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) { int flags = view.getSystemUiVisibility(); flags &= ~View.SYSTEM_UI_FLAG_LIGHT_STATUS_BAR; view.setSystemUiVisibility(flags); } } 

你可以在这里find这个项目