Android 4.4 之后,Android 通知栏变色再也不只是 iOS 专属了,设置通知栏跟应用标题栏同样的颜色,可以给用户更好的体验,这点是毋庸置疑的。对于 iOS 优秀的特性,我们要大胆借鉴,我觉着这没什么,谁都有追求美的权利嘛。
之前要实现通知栏的变色,很多人都是用 SystemBarTint 这个库,这个库使用起来非常方便,效果也很好,可以在 Java 代码里设置,也可以在 xml 里设置,具体用法参考 Github 上这个库即可。当然,这个库并不完美,尤其是配合 SwipeBackLayout 使用,会有一个 bug ,不过 Fuubo 的开发者 断锁怒潮 已经提出了解决方案,看这里 Android4.4 及以上版本实现状态栏与顶栏同色。可这两种方式都略显繁琐了,下面就介绍一下 5.0 以后 Android 自带的方法,只需要通过 values 设置的,史上最简单的实现状态栏变色的方法。
话不多说,直接上步骤吧:
新建一个 Theme 继承 Theme.AppCompat.Light.NoActionBar (不要修改属性名字)
1
2
3
4
5
6<?xml version="1.0" encoding="utf-8"?>
<resources>
<style name="DefaultTheme" parent="Theme.AppCompat.Light.NoActionBar">
<item name="colorPrimaryDark">@color/appPrimaryDark</item>
</style>
</resources>新建 color 文件,定义在 Theme 里引用的 color (不要修改属性名字)
1
2
3
4<?xml version="1.0" encoding="utf-8"?>
<resources>
<color name="appPrimaryDark">#ff0000</color>
</resources>
这样,代码部分的工作,就完成了!绝对的史上最简单啊!有木有!不过还需要做一些工作,才能达到我们想要的效果。此时 layout
里预览 UI 的时候,我们只需要将预览主题设置成 DefaultTheme
,然后将 SDK 版本设置成 22 以上即可。如下图:
当然,真机测试,需要在 manifest
里替换主题。
OK,至此,就全部完成了。不过实际应用过程中发现,局限还是不小的,必须是 SDK22 以上,在 layout
里预览才有效果,而且在 values
里定义的属性名字不能修改,还有在真机上,5.0 以上才有效,4.4 就没效果。