管理系统UI之一:淡化System Bar(Dimming the System Bars)

这篇文章讨论如何在4.0以及以上版本中淡化android的system bar(status bar和navigation bar)。在4.0之前的版本没有这样的功能。

用此文的方法并不会重新分配Ui的大小,只是status bar和navigation bar的相关图标会被弱化,比如navigation bar的几个虚拟键会弱化成很细微的小点。一旦你再次点击 status bar和navigation bar 的所在区域,他们就会再次完全显现。这种方式的好处是status bar和navigation bar并没有消失,仍然在界面上,但是它们的细节变暗了、模糊了。

在4.0以上的版本,你可以使用SYSTEM_UI_FLAG_LOW_PROFILE 标志来使 status bar和navigation bar变暗。虽然下面是调用decorViewsetSystemUiVisibility方法,但是你完全可以调用任何一个可见view的setSystemUiVisibility方法,效果是一样的。

// This example uses decor view, but you can use any visible view.
View decorView = getActivity().getWindow().getDecorView();
int uiOptions = View.SYSTEM_UI_FLAG_LOW_PROFILE;
decorView.setSystemUiVisibility(uiOptions);

一旦用户这这个时候触摸了status bar和navigation bar 的所在区域, 系统便清除掉了SYSTEM_UI_FLAG_LOW_PROFILE,status bar和navigation bar淡化效果将消失,如果你想再次淡化status bar和navigation bar,需要再次如上设置。

下面这张图演示了gallery中的一张图片在显示时, navigation bar被淡化的情景(注意status bar没有显示并不是淡化了,而是gallery应用直接隐藏了它),你可以看到右侧的 navigation bar 已经变成了三个透明度很低的灰白色的小圆点。

而这张图则是system bars 完全显示时候的样子。

上面提到了如果你在system bar变暗的时候触摸了相关区域,系统会自动清除setSystemUiVisibility()设置的flag,

其实你还可以自己手动清除:

View decorView = getActivity().getWindow().getDecorView();
// Calling setSystemUiVisibility() with a value of 0 clears
// all flags.
decorView.setSystemUiVisibility(0);