Android沉浸式状态栏

之前一直没怎么去研究这方面的,最近有个项目,让我在沉浸式里面真的沉浸死了,虽然学习了很多,但是还是个沉浸式菜鸟,这里也就记录一些遇到的问题和分享下相关经验吧

需求:

这里是一个侧滑页面和主页面,这个布局必须是占满全屏的

另外一种 需要实现这样的效果,也就是不会顶上去的

 

实现:

    <style name="MyFullScreenTheme" parent="@style/Theme.AppCompat.Light.NoActionBar">
        <item name="android:windowTranslucentStatus" tools:targetApi="kitkat">true</item>
        <item name="android:statusBarColor" tools:targetApi="lollipop">@android:color/transparent</item>
        <item name="android:windowTranslucentNavigation" tools:targetApi="kitkat">true</item>

    </style>

直接定义一个这样的主题,activity加入这个主题可以实现第一种需求

至于第二种,当然也可以这样做,但是必须要加个属性android:fitsSystemWindows="true"

这个的意思就是布局在状态栏下面

 

接下来我用了一个githup上面的

implementation 'com.gyf.barlibrary:barlibrary:2.3.0'//沉浸式状态栏和沉浸式导航栏管理

这个用法也简单,在baseactivity里面添加以下

    /**
     * 添加这个则会点击edittext的时候讲布局顶上去
     * 同时如果edittext的焦点不会被遮挡
     * */
    private ImmersionBar mImmersionBar;
    public void setStatusBar() {
        mImmersionBar = ImmersionBar.with(this);
        mImmersionBar.statusBarColor(R.color.white)
                //原理:如果当前设备支持状态栏字体变色,会设置状态栏字体为黑色,如果当前设备不支持状态栏字体变色,会使当前状态栏加上透明度,否则不执行透明度
                .statusBarDarkFont(true, 0.2f)
                //使用该属性必须指定状态栏的颜色,不然状态栏透明,很难看
                .fitsSystemWindows(true)
                //所有子类都将继承这些相同的属性
                .init();
    }

这样的话所有继承了baseactivity的activity都会实现第二种需求,但是又有其他不一样的,例如需求一那种,这个时候就在需要实现的位置单独添加一种状态

    private ImmersionBar mImmersionBar;
    public void setStatusBar() {
        mImmersionBar = ImmersionBar.with(this);
        mImmersionBar.statusBarColor(R.color.transparent)
                //原理:如果当前设备支持状态栏字体变色,会设置状态栏字体为黑色,如果当前设备不支持状态栏字体变色,会使当前状态栏加上透明度,否则不执行透明度
                .statusBarDarkFont(true, 0.2f)
                //使用该属性必须指定状态栏的颜色,不然状态栏透明,很难看
                .fitsSystemWindows(false)
                //所有子类都将继承这些相同的属性
                .init();
    }

这样就都实现了。如有疑问请留言

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值