Android沉浸式状态栏顶部着色

    如今,各大app都将状态栏改变成适合自身app风格的颜色了,颠覆了传统黑白的lowB,状态栏着色,也就是常说的“沉浸式状态栏”。一直觉得这个功能很麻烦很坑爹,网上看资料也只是走马观花,今天闲了下来,准备啃下这块骨头,可是,认真看了几篇文章后,发现这根本不是个骨头,只是我没用心而已,太浮躁了,作为一个靠技术吃饭的,着实应该面壁试过。
“沉浸式状态栏”只有从Android4.4以后的版本,才支持此功能,且谷歌从5.0开始实现了在代码中配置就可以实现这个功能:

private void initToolBarConfig() {
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {//5.0及以上
            View decorView = getWindow().getDecorView();
            int option = View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN
                    | View.SYSTEM_UI_FLAG_LAYOUT_STABLE;
            decorView.setSystemUiVisibility(option);
            getWindow().setStatusBarColor(Color.TRANSPARENT);
        } else if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {//4.4到5.0
            WindowManager.LayoutParams localLayoutParams = getWindow().getAttributes();
            localLayoutParams.flags = (WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS | localLayoutParams.flags);
        }
    }


 

这段代码添加到基类Activity中执行段,或者相应Activity的setContentView之前(某些机子这段代码无效果,由于时间原因未做深究)。

但是,如今市场上绝大多数的Android机子都是5.0一下的,所以,必须考虑到4.4-5.0这之间的用户群。解决这个需求有各式各样的方法,为了兼容各个版本的机型和最少的代码量,我们使用最简单的主题配置模式。

思路很简单:1 状态栏透明化,2状态栏着色

第一步:状态栏透明化

需要在values、values-v19、values-v21目录下分别创建相应的主题:

<style name="TranslucentTheme" parent="AppTheme">
</style>

//values-v19
<style name="TranslucentTheme" parent="Theme.AppCompat.Light.NoActionBar">
        <item name="android:windowTranslucentStatus">true</item>
        <item name="android:windowTranslucentNavigation">false</item>
</style>

//values-v21
<style name="TranslucentTheme" parent="Theme.AppCompat.Light.NoActionBar">
        <item name="android:windowTranslucentStatus">true</item>
        <item name="android:windowTranslucentNavigation">false</item>
        <item name="android:statusBarColor">@android:color/transparent</item>
</style>

到AndroidManifest中去给application或者相应的Activity设置主题TranslucentTheme便是

第一步:状态栏上色

这里有个小问题,是否让组件延伸到状态栏

android:fitsSystemWindows="true"  

如果在根布局中添加这个配置,这布局中的第一个组件是不会延伸到状态栏的,如图:


如果不添加,则默认延伸到状态栏。

如果不让逐渐延伸到状态栏,可以个整个Activity设置背景颜色来给状态栏着色,但这可能影响到后期Activity的主题更改,况且,既然是“沉浸式”的,我们最好让第一个组件延伸到状态栏,因为个人觉得,觉得Activity的Style的,往往是第一个组件的,

假设我们的第一个组件是toolBar,直接在toolBar中配置一个paddingTop就好了,至于具体的距离,根据实际而定。

在values、values-v19目录添加如下尺寸:

//values
<dimen name="padding_top">0dp</dimen>

//values-v19
<dimen name="padding_top">25dp</dimen>

然后配置toolBar
<android.support.v7.widget.Toolbar
        android:id="@+id/toolbar"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:background="@color/colorPrimary"
        android:navigationIcon="@mipmap/ic_launcher"
        android:paddingLeft="10dp"
        android:paddingTop="@dimen/padding_top"
        app:navigationIcon="@mipmap/ic_launcher"
        app:title="沉浸式状态栏"/>

至此,状态栏的颜色就和toobar的背景颜色一致。
 

PS:如果没有将状态栏事先透明化,当设置toolbar可以被延伸到状态栏的时候,toolBar反而会被状态栏给覆盖。很多同学有时候分不清是否需要在根部局中添加android:fitsSystemWidows="true",分不清的童鞋这样记:true的时候,就是把状态栏当成第一组件,不能被覆盖,false的时候,状态栏就不是第一组件,他可以被覆盖。


更多方法参考:http://www.jianshu.com/p/bae25b5eb867


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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值