传统的手机状态栏是呈现出黑色条状的,有的和手机主界面有很明显的区别。这同样就在必定程度上牺牲了视觉宽度,界面面积变小。沉浸式是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>
如图所示:接口
状态栏的颜色与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)); }
那么能够达到以下的效果:
(未完待续)