去年我写过一篇文章,透明状态栏和导航栏的终极解决方案,并在 Github 上开源了代码,https://github.com/Zackratos/UltimateBar,其实在那之后,我一直对这个项目进行维护和更新,最近,我又用 kotlin 重构了代码,并加入了一些新的功能,代码改动比较大,特意写篇文章介绍一下,希望这个库能给做 Android 开发的同学带来帮助。
旧版本的缺陷
事实上,这次重构之后已经是 3.0 版本了,之前重构 2.0 版本的时候已经有了大幅度的修改,但 2.0 版的重构主要是对代码的优化,方便开发者的调用,比如采用 Builder 模式进行配置参数。而这次的重构,在功能上做了很大的修改,可以适用于更多的场景。
旧版本主要有 3 个缺陷。
参数过多。旧版本中设置状态栏和导航栏的颜色的时候,参数包括了色值和透明度以及颜色的深度,导致调用的时候需要传入大量的参数,其实这些完全没必要,透明度和颜色深度都是可以包含在色值里面的,严格来说,只要传入一个参数就好了,至于它的透明度和深度,如果需要,开发者可以自己设置好之后再传入。
同一个 Activity 只能设置一次。旧版本中一般需要使用透明状态栏和导航栏的时候,都是在 onCreate 中设置,然后就固定了,但是如果有时候需要在 Activity 中再次设置不同的效果,就会力不从心了。
不支持灰色模式。我们知道, Android 6.0 以上是支持状态栏灰色模式的,就是把状态栏种的字体颜色改为灰色,这种模式是为了避免在白色界面上设置沉浸状态栏导致状态栏的字体看不见的尴尬的,但是旧版本中并没有对这种情况进行适配。
新版本的改进
针对旧版本的缺陷,新版本主要做了以下改进。
去除多余的参数。新版本中状态栏和导航栏的背景都只需要一个参数,参数类型是 Drawable,相对于 Color 来说,Drawable 明显更加灵活,不但可以设置状态栏和导航栏的颜色,而且可以设置透明度,还有渐变色等各种效果,也就是说,只要是 Drawable 能实现的效果,都能设置到状态栏和导航栏上。
支持多次设置。新版本中调整了代码的逻辑,现在可以对状态栏和导航栏的效果进行多次设置了,但是 UltimateBar 有四种效果,多次设置只能对同一种效果有效。比如说,如果你第一次设置了半透明的状态栏和导航栏,那么后面要修改&#