美文网首页
沉浸式状态栏

沉浸式状态栏

作者: minminaya | 来源:发表于2017-05-12 22:21 被阅读45次

    本来研究了1天的状态栏,准备截图录屏上手写笔记了,然后看到了这个
    Android 系统状态栏沉浸式/透明化完整解决方案
    ,然后我就把截图啊啥的delete~~~去了,大纲都删了QAQ

    5月17日意外发现

    Android开发:Translucent System Bar 的最佳实践


    不过还是整理下吧,作为补充

    实现状态栏透明化

    ①. 使用主题,只要是带Translucent的(当然这是活动是继承自Activity而不是AppCompatActivity)

    <style name="Scr" parent="android:Theme.Holo.Light.NoActionBar.TranslucentDecor" />
    

    ② 普通的主题下加上

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

    注意!!!布局xml里root节点下加了

    android:fitsSystemWindows="true"
    作用大致就是扩张显示到全屏,上面那篇博文的中间往后位置有图有介绍
    


    未沉浸前

    变成了这样


    沉浸
    其实感觉变丑了

    类似的这里头还可以设置把导航栏的虚拟按键也设置成透明的

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

    像这样

    ③有时候会发现在主题了设置的属性没有起作用,那就只能在code中撸一遍了

    只要在Activity加载布局之后添加

    Window window = getWindow();
    //状态栏透明
    window.addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS);
    //类似的,这个是导航栏透明
    window.addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_NAVIGATION);
    //这里还有很多FlAG,更多请查API文档
    ......
    
    

    当然有个高级的使用方式,这么写

    WindowManager.LayoutParams localLayoutParams = getWindow().getAttributes();
    localLayoutParams.flags = (WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS | localLayoutParams.flags);
    

    当前的属性标签和自己想设置的一个都不会漏


    状态的颜色设定

    来看张图吧

    里面这些对应的是Activity主题的item
    比如

    <style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">
            <!-- Customize your theme here. -->
            <item name="colorPrimary">@color/colorPrimary</item>
            <item name="colorPrimaryDark">@color/colorPrimaryDark</item>
            <item name="colorAccent">@color/colorAccent</item>
        </style>
    

    修改颜色只需要更改color值

    例外有个开源库SystemBarTint
    它可以设定和改变状态栏的背景色,不过在版本19以上完全可以用透明模式背景来给状态栏啊导航栏染色了。


    相关文章

      网友评论

          本文标题:沉浸式状态栏

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