1、什么是沉浸式状态栏?

沉浸式状态栏是指Activity的ActionBar的颜色和状态栏的颜色一样,两者连接起来了,看起来就像是一个整体,跟苹果的ios7以后的样式一样。如下图所示:

(沉浸式状态栏–图片来自网络)

Android 模仿状态栏显示网络状态 安卓模仿苹果ios 状态栏_Android 模仿状态栏显示网络状态

开始,还了解沉浸式到底是怎么一回事,跟许多网友一样,以为就是android kitkat新增加的一种模式,只要随便设置几行代码就能搞定的,结果倒腾了一两天也没弄出来这个所谓的沉浸式的状态栏和导航栏。这个过程中自然少不了各种百度谷歌/各种论坛社区一顿搜,最后才知道,其实所谓的沉浸式,只是在android kitkat版本之后,在新版本的基础上,通过二次开发,弄出来的一种跟苹果iOS7那种效果的状态栏和以及可隐藏的导航栏。

2、那么Android4.4原生的支持是怎么回事?

其实,Android原生支持的模式叫Translucent,实际上是一种全屏模式。很多人也会把沉浸式和这个Translucent混为一谈,仔细看下图,状态栏的颜色其实是在Activity的背景色上加了层遮罩,也就是说Activity不像以前那样被限制在导航栏和状态栏之间,而是全屏显示。

3、如何让你的应用开启Translucent模式?
关于如何让你的应用开启上面的Translucent模式,请参考下面这篇文章:
Android 沉浸式体验

很显然,这不是我们说的“沉浸式状态栏”,只是一种全屏体验,如果上下的状态栏和导航栏可以隐藏,那就是一个全屏的Activity了,一般的阅读器都是这种模式。而根据状态栏和导航栏的不同响应方式,这种全屏又可以分为
普通全屏模式(Fullscreen)沉浸模式 (Immersive)黏性沉浸模式 (Sticky Immersive)

具体如何实现,可以参考下面这篇文章的介绍:
Android 沉浸式全屏

根据不同的应用场景,试用不同的沉浸模式,给用户带来一种身临其境的体验…

所谓的沉浸式的实现原理其实很简单,就是把StatusBar的颜色改为跟ActionBar的颜色一样。

4、Android 5.0以上的系统如何支持沉浸式开发?

在android4.4系统上使用上面提到的方法来实现,但是在Google在Android 5.0以上的系统中增加的Material主题里提供了设置状态栏的标签,可以用来指定状态栏的颜色,这样,只要设置状态栏的颜色和ActionBar的颜色一致就可以轻松实现沉浸式效果了。关于Material主题的相关介绍,参考
使用Material的主题

下图是在android6.0模拟器上运行的Material主题的Demo,在value-21或者value-23目录下的style.xml文件中指定该Activity的style:

<style name="AppBaseTheme" parent="android:Theme.Material.Light.DarkActionBar">
        <!-- actionbar颜色 -->
        <item name="android:colorPrimary">@color/colorPrimary</item>

        <!-- 状态栏颜色 -->
        <item name="android:colorPrimaryDark">@color/colorPrimary</item>

        <!-- 窗口的背景颜色 -->
        <item name="android:windowBackground">@android:color/darker_gray</item>

        <!-- 文字颜色 -->
        <item name="android:colorAccent">@color/colorAccent</item>

        <!-- 状态栏颜色 默认会继承自 android:colorPrimaryDark -->
        <item name="android:statusBarColor">@color/colorPrimary</item>
    </style>

颜色值:

<color name="statuBar_color">#FF0000</color>
    <color name="colorPrimary">#1470E4</color>
    <color name="colorAccent">#1448E4</color>

这里通过把ActionBar的颜色和状态栏的颜色设置成同一个颜色,来实现沉浸式效果。

Android 模仿状态栏显示网络状态 安卓模仿苹果ios 状态栏_ios_02

Android6.0中,下拉状态栏会弹出通知栏,通知栏不再是全屏显示了,有一些边距,有点像是Dialog样式:

Android 模仿状态栏显示网络状态 安卓模仿苹果ios 状态栏_ios_03

再次点击通知栏会出现更多的常用操作选项,点击其他地方或者上拉通知栏消失:

Android 模仿状态栏显示网络状态 安卓模仿苹果ios 状态栏_沉浸式状态栏_04


从这张图可以看出来,系统的通知栏可能就是采用的Material主题样式,但不完全是,但是风格是一样的。

关于沉浸式、沉浸式全屏、以及Material主题,大家不要弄混淆,本人也是刚刚开始研究这部分的内容,在这做一个记录,也分享一下自己的学习内容,希望与同行一起交流、分享、进步,有说的不对的地方,欢迎留言指正。