一、概述
近期注意到QQ新版使用了沉浸式状态栏,ok,先声明一下:本篇博客效果下图:
关于这个状态栏变色到底叫「Immersive Mode」/「Translucent Bars」有兴趣可以去 为什么在国内会有很多用户把 「透明栏」(Translucent Bars)称作 「沉浸式顶栏」?上面了解了解,请勿指点我说的博文标题起得不对,thx。
恩,接下来正题。
首先只有大于等于4.4版本支持这个半透明状态栏的效果,但是4.4和5.0的显示效果有一定的差异,所有本篇博文内容为:
- 如何实现半透明状态栏效果在大于4.4版本之上。
- 如何让4.4的效果与5.0的效果尽可能一致。
看了不少参考文章,都介绍到这个库,大家可以了解:SystemBarTint。
不过本篇博文并未基于此库,自己想了个hack,对于此库源码有空再看了。
二、效果图
先贴下效果图,以便和实现过程中做下对比
- 4.4 模拟器
- 5.x 真机
[new]贴个如果顶部是图片的效果图,其实是一样的,为了方便我就放侧栏的顶部了。
ok,有了效果图之后就开始看实现了。
三、实现半透明状态栏
因为本例使用了NavigationView,所以布局代码稍多,当然如果你不需要,可以自己进行筛减。
注意引入相关依赖:
1 2 3 |
compile 'com.android.support:appcompat-v7:22.2.1' compile 'com.android.support:support-v4:22.2.1' compile 'com.android.support:design:22.2.0' |
(一)colors.xml 和 styles.xml
首先我们定义几个颜色:
res/values/color.xml
1 2 3 4 5 6 |
<?xml version="1.0" encoding="utf-8"?> <resources> <color name="primary">#FF03A9F4</color> <color name="primary_dark">#FF0288D1</color> <color name="status_bar_color">@color/primary_dark</color> </resources> |
下面定义几个styles.xml
注意文件夹的路径:
values/styles.xml
1 2 3 4 5 6 7 8 9 10 11 12 |
<resources> <style name="BaseAppTheme" parent="Theme.AppCompat.Light.NoActionBar"> <!-- Customize your theme here. --> <item name="colorPrimary">@color/primary</item> <item name="colorPrimaryDark">@color/primary_dark</item> <item name="colorAccent">#FF4081</item> </style> <!-- Base application theme. --> <style name="AppTheme" parent="@style/BaseAppTheme"> </style> </resources> |
values-v19
1 2 3 4 5 |
<resources> <style name="AppTheme" parent="@style/BaseAppTheme"> <item name="android:windowTranslucentStatus">true</item> </style> </resources> |
ok,这个没撒说的。注意我们的主题是基于NoActionBar的,android:windowTranslucentStatus
这个属性是v19开始引入的。
(二)布局文件
activity_main.xml
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 |
<android.support.v4.widget.DrawerLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" > <LinearLayout android:id="@+id/id_main_content" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical"> <android.support.v7.widget.Toolbar android:id="@+id/id_toolbar" android:layout_width="match_parent" android:layout_height="wrap_content" android:backgroundt="9-28-1" src="http://jbcdn2.b0.upaiyun.com/2015/09/face2e5fbc6a83eef6cef69eccbf7812.jpg">
关于这个状态栏变色到底叫「Immersive Mode」/「Translucent Bars」有兴趣可以去 为什么在国内会有很多用户把 「透明栏」(Translucent Bars)称作 「沉浸式顶栏」?上面了解了解,请勿指点我说的博文标题起得不对,thx。 恩,接下来正题。 首先只有大于等于4.4版本支持这个半透明状态栏的效果,但是4.4和5.0的显示效果有一定的差异,所有本篇博文内容为:
看了不少参考文章,都介绍到这个库,大家可以了解:SystemBarTint。 不过本篇博文并未基于此库,自己想了个hack,对于此库源码有空再看了。 二、效果图先贴下效果图,以便和实现过程中做下对比
[new]贴个如果顶部是图片的效果图,其实是一样的,为了方便我就放侧栏的顶部了。 ok,有了效果图之后就开始看实现了。 三、实现半透明状态栏因为本例使用了NavigationView,所以布局代码稍多,当然如果你不需要,可以自己进行筛减。 注意引入相关依赖:
(一)colors.xml 和 styles.xml首先我们定义几个颜色: res/values/color.xml
下面定义几个styles.xml 注意文件夹的路径: values/styles.xml
values-v19
ok,这个没撒说的。注意我们的主题是基于NoActionBar的, (二)布局文件activity_main.xml
|