安卓沉浸状态栏

2016-10-21  本文已影响464人  xiseven

使用安卓几年了,之前对安卓沉浸式状态栏很有好感,现在学习安卓开发就研究了一番,期间看了不是前辈的博客,学到不上东西,以下这篇博客就是学习加实践总结出来的。


沉浸式状态栏好像是从ios引进的,不过沉浸式的效果让软件更加精致,体验也会更好。
安卓从4.4开始引入透明状态栏,5.0之后推出Material Design设计风格,
安卓的沉浸状态栏也有了自己的风格,但这种带有阴影效果的风格可不是所有人都喜欢,
所以文章会实现不带阴影效果的沉浸状态栏

安卓4.4

4.4实现透明状态栏会是一种渐变的效果,看图

4.4透明状态栏效果图

实现方式:

<item name="android:windowTranslucentNavigation">true</item>
<item name="android:windowTranslucentStatus">true</item>
getWindow().addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS);
getWindow().addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_NAVIGATION);
getWindow().getAttributes().flags = WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS 
| WindowManager.LayoutParams.FLAG_TRANSLUCENT_NAVIGATION;

注意:以上凡是带有Navigation的代码都是作用于导航栏的(使导航栏透明),如不需要可删除

以上三种方式任选一种即可得到上图的透明状态栏效果


安卓4.4以上

4.4之后的透明状态栏有两种呈现形式,即带阴影效果和不带阴影效果,话不多少上图

带阴影效果 没有阴影效果

实现带阴影效果的方式:其实和4.4是相同的

<item name="android:windowTranslucentNavigation">true</item>
<item name="android:windowTranslucentStatus">true</item>
getWindow().addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS);
getWindow().addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_NAVIGATION);
getWindow().getAttributes().flags = WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS 
| WindowManager.LayoutParams.FLAG_TRANSLUCENT_NAVIGATION;

实现不带阴影效果的方式:

getWindow().getDecorView().setSystemUiVisibility(View.SYSTEM_UI_FLAG_LAYOUT_STABLE | View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN);
getWindow().getDecorView().setSystemUiVisibility(View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION );
getWindow().setStatusBarColor(Color.TRANSPARENT);
getWindow().setNavigationBarColor(Color.TRANSPARENT);

注意:以上凡是带有Navigation的代码都是作用于导航栏的(使导航栏透明),如不需要可删除

顺带提一下

使用android:fitsSystemWindows="true"时组件不会填充到状态栏和导航栏,如下图
默认为false,即上面所有截图的效果

android:fitsSystemWindows="true"的效果

结语

第一次写博客,希望记录所学,一步一步充实自己。
以上的代码经过测试,如有问题欢迎指正,谢谢。
如果各位有什么好的建议或实现方法,也可以共同交流,

上一篇下一篇

猜你喜欢

热点阅读