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

泡在网上的日子 / 文 发表于2014-11-17 18:44 次阅读 System UI

这篇文章讨论如何在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);



收藏 赞 (4) 踩 (1)
上一篇:android 加载器loader详解
Loaders loader在android 3.0之后才被引入,它简化了在activity和fragment中异步加载数据的步骤(个人认为简化是次要的,更重要的是优雅的实现了异步加载),loader有如下特点: 适用于每个activity和fragment 提供异步加载的实现方法 监听数据源的一举一动
下一篇:管理系统UI之二:隐藏Status Bar (Hiding the Status Bar)
本文将讲解如何在不同android版本中隐藏status bar,隐藏状态栏(或者是导航栏)可以让内容得到更多的展示空间,从而提供一个更加沉浸式的用户体验。 下图展示了status bar可见时app的样子: 下图展示了status bar隐藏之后app的样子,注意我们有意让actionba