沉浸式状态栏

传统的手机状态栏是呈现出黑色条状的,有的和手机主界面有很明显的区别。这一样就在一定程度上牺牲了视觉宽度,界面面积变小。沉浸式是APP界面图片延伸到状态栏, 应用本身沉浸于状态栏。

为了实现沉浸式状态栏,有两种方法。第一种是为每个activity设置状态栏颜色,即变色龙式状态栏。第二种是将状态栏透明化,将布局延伸到状态栏下,实现真正的沉浸式状态栏。

变色式状态栏

设置状态栏颜色的接口从安卓5.0(API 21)才开始提供,因此变色式状态栏只能用在运行5.0以及5.0以上版本的安卓系统的设备上。

如果app使用了ActionBar的话,系统会自动根据bar的颜色改变状态栏的颜色。不在话下。
如果没有使用Actionbar,例如使用了自定义的Toolbar或者没有使用,则需要将主题设置为:

values/styles.xml:

<style name="AppTheme.Base" parent="Theme.Design.Light.NoActionBar">
    <!-- Customize your theme here. -->
    <item name="colorPrimary">@color/colorPrimary</item>
    <item name="colorPrimaryDark">@color/colorPrimaryDark</item>
    <item name="colorAccent">@color/colorAccent</item>
</style>

我们还需要将状态栏声明为透明,即将android:windowTranslucentStatus这个属性设置为true,这个API从安卓4.4(API 19)开始被支持。

values-v19:

<style name="AppTheme" parent="AppTheme.Base">
    <item name="android:windowTranslucentStatus">true</item>
    <item name="android:fitsSystemWindows">true</item>
</style>

如图所示:
clipboard.png

状态栏的颜色与Toolbar颜色一致,但是被一层半透明的黑色笼罩。

不论是否使用了Actionbar或Toolbar,都可以使用以下方法通过API设置状态栏颜色:

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
    activity.getWindow()
        .addFlags(WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS);
    activity.getWindow()
        .clearFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS);
        
    // colorResId就是你要设置的状态栏颜色值
    activity.getWindow()
        .setStatusBarColor(activity.getResources().getColor(colorResId));
}

那么可以达到如下的效果:

clipboard.png

(未完待续)


mist14
45 声望8 粉丝

想养喵