沉浸式状态栏ImmersionBar源码解读

第一步、软引用初始化activity或者fragment。

沉浸式状态栏ImmersionBar源码解读_第1张图片

第二步、使用BarParams的javaBean去存储状态栏参数.通过各种set方法去修改javabean中的参数。

第三步、判断系统,对个别系统进行单独处理(通过反射)。

沉浸式状态栏ImmersionBar源码解读_第2张图片
传的key主要有几个:

"ro.miui.ui.version.name"  ---> 小米系统
"ro.build.version.emui"  ---> 华为系统
"ro.build.display.id"  ---> 魅族系统

第四步、获取状态栏高度(通过反射)。

沉浸式状态栏ImmersionBar源码解读_第3张图片
传入的key为 status_bar_height.

第五步、解决顶部状态栏与布局重叠。

方法一: 为子view添加fitsSystemWindows = true 属性。
沉浸式状态栏ImmersionBar源码解读_第4张图片
方法二: 为子view添加marginTop属性,加上获取的状态栏高度。

第六步、小米系统版本6.0以上的需要单独设置状态栏字体为深色( 如果需要状态栏字体为深色 )。

沉浸式状态栏ImmersionBar源码解读_第5张图片
判断小米的系统版本可以通过3中的系统的判断,如果用小米的key反射拿到值不为空,则是小米系统,同时这个值是版本号,如: v3.3 ,只需截取调第一个字符串就可以判断了。
注意: 小米的miui 6.0之前 , 魅族的flyme 4.0之前 和 其他手机的android6.0之前不支持设置通知栏字体颜色。

第七步、隐藏状态栏的flag

沉浸式状态栏ImmersionBar源码解读_第6张图片

第八步、最后通过init方法,把配置的参数放到map中,然后设置透明状态栏。

沉浸式状态栏ImmersionBar源码解读_第7张图片
关键的来了!!!
开始设置透明状态栏.

先设置flag:
沉浸式状态栏ImmersionBar源码解读_第8张图片
上图是5.0以上的设置,下图是4.4到5.0直接的设置:
沉浸式状态栏ImmersionBar源码解读_第9张图片
图中的hideBar()方法就是第七步中的方法。
如图,最后调用setSystemUiVisbility方法,把flag放进去,就实现了沉浸式状态栏了。

你可能感兴趣的:(java)