安卓沉浸式状态栏实现

目前市面上的大部分app使用到的沉浸式效果为两种,一种是没有图片背景打底,ActionBar与状态栏融为一体,另一种是以图片内容做背景直接填充至状态栏的,下面分别对这两种效果的实现进行具体分析。

1ActionBar与通知栏融为一体的沉浸式状态栏

直接修改状态栏背景颜色为ActionBar的背景颜色:

activity.getWindow().addFlags(FLAG_TRANSLUCENT_STATUS);
activity.getWindow().addFlags(FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS);// 需要添加该标志位才能自定义状态栏颜色
activity.getWindow().setStatusBarColor(Color.WHITE);  // 自定义的状态栏背景颜色,需要Android5.0及以上系统(api level >= 21)
activity.getWindow().getDecorView().setSystemUiVisibility(View.SYSTEM_UI_FLAG_LIGHT_STATUS_BAR);//浅色的状态栏样式,对应的文字及图标为深色,需要Android6.0及以上系统(api level >= 23)

2带有图片背景的沉浸式状态栏

把页面设置为全屏显示,并将状态栏样式设置为透明样式

activity.getWindow().addFlags(FLAG_TRANSLUCENT_STATUS);// 状态栏透明,需Android4.4.2及以上系统(api level >= 19)
int flag = activity.getWindow().getDecorView().getSystemUiVisibility();
flag |= (View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN);
activity.getWindow().getDecorView().setSystemUiVisibility(flag);

仍有一点需要注意的是如果图片的颜色是浅色,需要用到浅色的状态栏样式,否则状态栏图标与文字的显示会收到影响,需要使状态栏显示为透明,并且状态栏文字及图标为深色。

activity.getWindow().clearFlags(FLAG_TRANSLUCENT_STATUS);
activity.getWindow().addFlags(FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS);
activity.getWindow().setStatusBarColor(Color.TRANSPARENT);  // 设置透明状态栏,需要Android5.0及以上系统(api level >= 21)
activity.getWindow().getDecorView().setSystemUiVisibility(View.SYSTEM_UI_FLAG_LIGHT_STATUS_BAR);//浅色的状态栏样式,对应的文字及图标为深色,需要Android6.0及以上系统(api level >= 23)

以上就是在项目中实现沉浸式状态栏中遇到的问题,总结一下,需要注意的是自定义状态栏颜色activity.getWindow().setStatusBarColor之前需要添加FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS,并且需要清除FLAG_TRANSLUCENT_STATUS。另外对于安卓系统版本,4.4.2(19)支持通过FLAG_TRANSLUCENT_STATUS实现透明状态栏,5.0(21)支持getWindow().setStatusBarColor,6.0(23)支持设置状态栏文字及图标颜色。

你可能感兴趣的:(安卓沉浸式状态栏实现)