Android开发之android4.4沉浸式状态栏后toolbar和状态栏重复(重叠,覆盖)的bug

我们看下android4.4的手机沉浸式状态栏的效果图:

Android开发之android4.4沉浸式状态栏后toolbar和状态栏重复(重叠,覆盖)的bug_第1张图片

让所有的activity继承baseActivity,然后在baseactivity里面为重复的高度添加一个状态栏高度的view将toolbar顶下去即可。

如果你的activity没有继承baseActivity,那么你就只有在每个Activity的setContentView后面添加如下代码

看不懂可以联系我。

  @Override
    protected void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        //应用竖直屏幕显示
        setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
        setContentView(getLayoutResId());
        //判断api19版本,填充状态栏高度这个方法一定要在setContentView后调用
        if (android.os.Build.VERSION.SDK_INT == Build.VERSION_CODES.KITKAT) {
            //填充重叠的部分
            addMoreView();
        }
        initView(savedInstanceState);
        if (this instanceof IBaseView) {
            mPresenterImpl.onAttach((V) this);
        }

    }


/**
     * 添加一个和状态栏一样高度的view将toolbar顶下去
     */
    private void addMoreView() {
        //获取windowphone下的decorView
        ViewGroup decorView = (ViewGroup) getWindow().getDecorView();
        int count = decorView.getChildCount();
        //判断是否已经添加了statusBarView
        if (count > 0 && decorView.getChildAt(count - 1) instanceof TextView) {
            decorView.getChildAt(count - 1).setBackgroundColor(Color.parseColor("#8B1C21"));
        } else {
            //新建一个和状态栏高宽的view
            View statusView = createStatusBarView();
            decorView.addView(statusView);
        }
        ViewGroup rootView = (ViewGroup) ((ViewGroup) findViewById(android.R.id.content)).getChildAt(0);
        //rootview不会为状态栏留出状态栏空间
        ViewCompat.setFitsSystemWindows(rootView, true);
        rootView.setClipToPadding(true);

    }

    /**
     * 创建一个与状态看一样高度的view
     *
     * @return 返回view
     */
    private View createStatusBarView() {
        // 绘制一个和状态栏一样高的矩形
        TextView statusBarView = new TextView(this);
        LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, getStatusBarHeight());
        statusBarView.setLayoutParams(params);
        statusBarView.setBackgroundColor(Color.parseColor("#8B1C21"));
        return statusBarView;
    }

    /**
     * 拿到状态栏的高度
     *
     * @return 返回高度
     */
    private int getStatusBarHeight() {
        Class c;
        try {
            c = Class.forName("com.android.internal.R$dimen");
            Object obj = c.newInstance();
            Field field = c.getField("status_bar_height");
            int x = Integer.parseInt(field.get(obj).toString());
            LogUtils.e("打印高度:" + getResources().getDimensionPixelSize(x));
            return getResources().getDimensionPixelSize(x);
        } catch (Exception e) {
            e.printStackTrace();
        }
        return 0;
    }

 

在看下修复后android4.4手机的效果:

Android开发之android4.4沉浸式状态栏后toolbar和状态栏重复(重叠,覆盖)的bug_第2张图片

 

 

感谢原博主:https://www.jianshu.com/p/752f4551e134

你可能感兴趣的:(Android开发错误记录)