设置沉浸式布局适配4.4及以上所有机型

对布局进行沉浸式设置,对于不同手机版本号设置方法是不同的。由于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)即可。效果图如下

猜你喜欢

转载自blog.csdn.net/qinbin2015/article/details/89306179