/**
* 设置沉浸式状态栏
*/
private void immersive() {
// android 4.4 之前不支持沉浸式
if (Build.VERSION.SDK_INT < Build.VERSION_CODES.KITKAT) {
return;
}
// android 5.0 之后
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
Window window = getWindow();
window.clearFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS);
window.addFlags(WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS);
// 设置状态栏透明
window.setStatusBarColor(Color.TRANSPARENT);
int uiVisibility = window.getDecorView().getSystemUiVisibility();
// 布局内容全部展示
uiVisibility |= View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN;
// 隐藏虚拟导航栏
uiVisibility |= View.SYSTEM_UI_FLAG_HIDE_NAVIGATION;
// 防止内容区域大小发生变化
uiVisibility |= View.SYSTEM_UI_FLAG_LAYOUT_STABLE;
window.getDecorView().setSystemUiVisibility(uiVisibility);
} else {
getWindow().addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS);
}
}
// 状态栏高度
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;
}
/**
* 解决沉浸式 Toolbar 上移问题
*
* @param context
* @param view
*/
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());
}
使用:在Activity onCreate 中调用
immersive();
setHeightAndPadding(this, toolbar);