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

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

让所有的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手机的效果:

 

 

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值