现在沉浸式模式运用越来越广泛,效果确实也挺不错美观,但是android在5.0之前是不支持沉浸式模式的,直到5.0后才加入沉浸式模式,所以特此记录下5.0以下和以上沉浸式模式的实现方式。(都是代码没用样式,代码扩展性强,易复用)
在5.0以下要实现沉浸式模式首选需要改变状态栏背景色
getWindow().addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS);
FLAG_TRANSLUCENT_STATUS就是将状态栏设置为半透明状态,效果如图
未使用之前效果:
使用之后
状态栏颜色已经变为透明
然后获取状态栏的高度
private int getStatusBarHeight() {
int result = 0;
int resourceId = getResources().getIdentifier("status_bar_height", "dimen", "android");
if (resourceId > 0) {
result = getResources().getDimensionPixelSize(resourceId);
}
return result;
}
getIdentifier方法文档有注释可以自己查看api的作用以及参数说明
然后在自己自定义一个view StatusBarView充当状态栏,这里状态栏颜色我是固定的
private StatusBarView createStatusBarView() {
// 自定义一个view 充当状态栏
StatusBarView statusBarView = new StatusBarView(this);
LinearLayout.LayoutParams params =
new LinearLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, getStatusBarHeight());
statusBarView.setLayoutParams(params);
statusBarView.setBackgroundColor(Color.parseColor("#D81B60"));
return statusBarView;
}
最后通过DecorView添加进去
ViewGroup decorView = (ViewGroup) getWindow().getDecorView();//获取根布局
decorView.addView(createStatusBarView());
效果如图
当然在使用的时候 要加上版本号的判断
if (Build.VERSION.SDK_INT < Build.VERSION_CODES.LOLLIPOP)
5.0以上的实现 就相对于简单多了
系统提供了setStatusBarColor可以设置状态栏颜色和setNavigationBarColor设置虚拟导航栏背景色
getWindow().setStatusBarColor(getResources().getColor(android.R.color.holo_red_light));
getWindow().setNavigationBarColor(getResources().getColor(android.R.color.holo_red_light));
这样就实现了状态栏颜色的改变
在6.0时又增加可以改变状态栏图标和文字颜色
getWindow().getDecorView().setSystemUiVisibility(View.SYSTEM_UI_FLAG_LIGHT_STATUS_BAR);
这样就实现了图标和文字变成浅黑色