对布局进行沉浸式设置,对于不同手机版本号设置方法是不同的。由于4.4以下手机不占据状态栏,所以只考虑4.4版本以上手机。
1、4.4版本手机
(1)第一种方式:设置主题样式
<item name="android:windowTranslucentStatus">true</item>
<item name="android:windowTranslucentNavigation">true</item>
(2)第二种方式:动态代码设置
getWindow().addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS);
2、5.0版本以上手机
Window window = getWindow();
window.clearFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS);
window.addFlags(WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS);
//设置状态栏颜色透明
window.setStatusBarColor(Color.TRANSPARENT);
int visibility = window.getDecorView().getSystemUiVisibility();
//布局内容全屏展示
visibility |= View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN;
//隐藏虚拟导航栏
visibility |= View.SYSTEM_UI_FLAG_HIDE_NAVIGATION;
//防止内容区域大小发生变化
visibility |= View.SYSTEM_UI_FLAG_LAYOUT_STABLE;
window.getDecorView().setSystemUiVisibility(visibility);
另外当我们设置沉浸式以后,需要对相应的布局做相应的调整,不然内容区域将会被手机的系统状态栏遮挡,如下图:
调整方法如下:
/**
* 获取系统状态栏高度
*/
public int getStatusBarHeight(Context context){
int resId = context.getResources().getIdentifier("status_bar_height", "dimen", "android");
if (resId > 0){
return context.getResources().getDimensionPixelSize(resId);
}
return 0;
}
/**
* @param view 当前内容view,比如toolBar
*/
public void setHeightAndPadding(Context context, View view){
ViewGroup.LayoutParams layoutParams = view.getLayoutParams();
layoutParams.height += getStatusBarHeight(context);
view.setPadding(view.getPaddingLeft(), view.getPaddingTop() +
getStatusBarHeight(context), view.getPaddingRight(), view.getPaddingBottom());
}
设置完沉浸式,调用setHeightAndPadding(this,R.id.toolBar)即可。效果图如下