作者博客
http://www.jianshu.com/u/e01fe6ddfa1c
前言
自从android4.4开始,android手机状态栏再也不是一成黑的时代,之前叫做变色龙,miui6发布会把他叫做沉浸式,之后大家就自然而然的接受了沉浸式这个名称,其实实际应该叫做Translucent Bar,即为透明状态栏。
沉浸式实现原理其实是使整个activity布局延伸到整个屏幕,然后使状态栏变成透明色,有些手机会有导航栏,同样也可以把导航栏变成透明色,这样会使一些app更加美观。
先看两个概念
状态栏
导航栏
废话不多说了,直接看GIF
引入
github仓库地址:https://github.com/gyf-dev/ImmersionBar
特性
基本介绍
基础用法,建议在BaseActivity里调用
高级用法,如果基础用法不能满足你的需求,可以试试这里的方法
详细介绍
解决状态栏和布局顶部重合
上面已经说了,沉浸式原理就是使整个布局延伸到状态栏和导航栏,既然这样必然导致一个问题,就是状态栏和布局顶部重叠,直接看图
眼神好的同学已经看到上图中给了四种解决方案啦,在这里我就说一
1.使用dimen自定义状态栏高度
使用系统的fitsSystemWindows属性
使用ImmersionBar的fitsSystemWindows(boolean fits)方法
使用ImmersionBar的statusBarView(View view)方法
总结:这四种方法,任选其一使用就可以了,不要一起使用哦,根据项目而定,比如有侧边栏的,建议使用第1种或者第4种,最后来一张效果图
图片状态栏+彩色导航栏
全屏图片
彩色状态栏+彩色导航栏
结合DrawerLayout使用
结合Fragment使用(fragment+viewpager)
为了使每个fragment都可以设置不同的沉浸式样式,这里给出两种解决方式
1.使用viewpager的addOnPageChangeListener方法,直接上代码
2.fragment继承库里的ImmersionFragment,然后在immersionInit()方法中初始化,直接上代码
1和2实现效果相同,如下
结合侧滑返回使用
修改状态栏字体颜色为深色
设置状态栏和导航栏透明度
解决EditText和软键盘的问题
特性总结
ImmersionBar除了这些特性之外,还有其他特性哦,这里就不一一指出了,大家参考高级用法的注释,可以去实现看看哦,下面就来分析源码吧
源码分析
本库采用类似建造者模式来完成,只为了方便大家更灵活的去设置状态栏和导航栏风格。实现沉浸式是分为两块,一块是android5.0以上,一块是android4.4,这两块实现原理完全不一样,在讲解原理之前先看几个概念,下面需要用到
Android自5.0起,为我们提供了设置状态栏和导航栏颜色的API,我们可以自己设置状态栏和导航栏的颜色。本框架在android5.0以上就是采用官方api完成的,网上关于5.0以上的实现基本都是这样,在这里就不多说了,在这里只说一点,就是设置颜色的时候不是直接填入开发者传入的颜色值,而是采用v4包下的ColorUtils.blendARGB()方法来设置,为什么这样设计呢?有些app的状态栏并不是和标题栏颜色相同,稍微有些色差,所以在这里开发者只需要通过blendARGB()设置透明度就可以形成这种色差,而且还可以指定两种颜色之间的色差值,方便大家,android4.4上亦是如此。请看以下代码:
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
activity.getWindow().getDecorView().setSystemUiVisibility( View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN|View.SYSTEM_UI_FLAG_LIGHT_STATUS_BAR);
}
android 4.1以上支持状态栏和导航栏隐藏
至此,ImmersionBar库的用法与原理都讲完了。网上关于沉浸式的介绍铺天盖地,但是很少有人把它们封装起来,当开发者调用的时候还得自己去写大量代码,消耗大家时间。写这个库的目的就是方便大家的开发,解决大家在沉浸式方面出现的问题。如果还有不懂得地方可以去demo里看看,或者直接底下留言!
扫码关注腾讯云开发者
领取腾讯云代金券
Copyright © 2013 - 2025 Tencent Cloud. All Rights Reserved. 腾讯云 版权所有
深圳市腾讯计算机系统有限公司 ICP备案/许可证号:粤B2-20090059 深公网安备号 44030502008569
腾讯云计算(北京)有限责任公司 京ICP证150476号 | 京ICP备11018762号 | 京公网安备号11010802020287
Copyright © 2013 - 2025 Tencent Cloud.
All Rights Reserved. 腾讯云 版权所有