安卓沉(bian)浸(se)式状态栏实践

沉浸式状态栏

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

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

变色式状态栏

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

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

values/styles.xml:spa

<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)开始被支持。code

values-v19:xml

<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设置状态栏颜色:ip

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

(未完待续)

相关文章
相关标签/搜索