android沉浸式状态栏实现

Android4.4以后的版本起,android系统开始支持沉浸式的状态栏样式,现在也有很多主流APP都已经支持了,像腾讯QQ,QQ空间,天天动听等,个人也是比较喜欢这样样式的效果。

QQ控件的沉浸式效果
那具体在开发中,我们怎么实现呢?首先,我们把状态栏和导航栏透明化,这个需要对当前系统版本进行判断,只有4.4及以上版本才支持,具体代码如下,我们只需要在onCreate的时候加载就行:

private void init(){
        //判断当前SDK版本号,如果是4.4以上,就是支持沉浸式状态栏的
        if (VERSION.SDK_INT >= VERSION_CODES.KITKAT) {
            //透明状态栏  
            getWindow().addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS);
          //透明导航栏  
            getWindow().addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_NAVIGATION);
        }
    }

这样处理后,效果的确实现了,但是会发现布局也移动到顶部的状态栏,这个肯定不是我们想要的效果,这个时候我们可以在根布局添加两行属性即可:

android:fitsSystemWindows="true"  
android:clipToPadding="true"

这个时候效果基本上就实现了,但是细心的朋友还会发现一个问题,那就是这个时候的状态栏颜色和根布局颜色是一样的,而其实我们的最终想要的效果是状态栏的颜色和布局中顶部的第一个控件的颜色相同即可,所以我们还需要改一下设置,把刚刚的那两个属性添加到顶部第一个控件上,而不是放到根布局中,最终就可以实现我们想要的沉浸式布局的效果,并且是根据我们布局中的第一个控件的背景进行沉浸的。另外,还有一个优化技巧,那就是我们每次都需要在代码中判断并设置状态栏透明是比较繁琐的,其实,我们可以添加一个value-19属性,在xml文件中进行设置,那样就不需要在每个activity代码中配置了,具体配置是在res下面创建一个values-v19文件夹,然后再在里面创建一个styles.xml文件,里面代码如下:

<?xml version="1.0" encoding="utf-8"?>
<resources>

    <style name = "AppTheme" parent = "Base.AppTheme">
        <!--这两句用于状态栏透明 实现沉浸式状态栏-->
        <item name = "android:windowTranslucentStatus">true</item>
        <item name = "android:windowTranslucentNavigation">false</item>
    </style>
</resources>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值