美文网首页
安卓沉浸状态栏

安卓沉浸状态栏

作者: xiseven | 来源:发表于2016-10-21 23:22 被阅读464次

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


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

    安卓4.4

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

    4.4透明状态栏效果图

    实现方式:

    • 方式一:利用xml实现
      在values-v19的style资源文件中找到系统应用的主题样式,在其中添加
    <item name="android:windowTranslucentNavigation">true</item>
    <item name="android:windowTranslucentStatus">true</item>
    
    • 方式二
      在activity的onCreate方法中加入
    getWindow().addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS);
    getWindow().addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_NAVIGATION);
    
    • 方式三
      在activity的onCreate方法中加入
    getWindow().getAttributes().flags = WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS 
    | WindowManager.LayoutParams.FLAG_TRANSLUCENT_NAVIGATION;
    

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

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


    安卓4.4以上

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

    带阴影效果 没有阴影效果

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

    • 方式一:利用xml实现
      在values-v19的style资源文件中找到系统应用的主题样式,在其中添加
    <item name="android:windowTranslucentNavigation">true</item>
    <item name="android:windowTranslucentStatus">true</item>
    
    • 方式二
      在activity的onCreate方法中加入
    getWindow().addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS);
    getWindow().addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_NAVIGATION);
    
    • 方式三
      在activity的onCreate方法中加入
    getWindow().getAttributes().flags = WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS 
    | WindowManager.LayoutParams.FLAG_TRANSLUCENT_NAVIGATION;
    

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

    • 在activity的onCreate方法中加入
    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"的效果

    结语

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

    相关文章

      网友评论

          本文标题:安卓沉浸状态栏

          本文链接:https://www.haomeiwen.com/subject/zlpcuttx.html