美文网首页
Android4.4以上沉浸式状态栏的简单适配

Android4.4以上沉浸式状态栏的简单适配

作者: kdong | 来源:发表于2018-11-06 09:36 被阅读0次

    先看下通用的代码

     // 5.0以上系统状态栏透明
            if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
                Window window = getWindow();
                window.clearFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS);
                window.getDecorView().setSystemUiVisibility(View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN
                        | View.SYSTEM_UI_FLAG_LAYOUT_STABLE);
                window.addFlags(WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS);
                window.setStatusBarColor(Color.TRANSPARENT);
    
                int statusBarHeight1 = -1;
                //获取status_bar_height资源的ID
                int resourceId = getResources().getIdentifier("status_bar_height", "dimen", "android");
                if (resourceId > 0) {
                    //根据资源ID获取响应的尺寸值
                    statusBarHeight1 = getResources().getDimensionPixelSize(resourceId);
                }
    
                //设置contentview为fitsSystemWindows
                ViewGroup contentView = (ViewGroup) findViewById(android.R.id.content);
                View childAt = contentView.getChildAt(0);
                if (childAt != null) {
                    childAt.setFitsSystemWindows(true);
                }
                //给statusbar着色
                View view = new View(this);
                view.setLayoutParams(new ViewGroup.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT,statusBarHeight1));
                view.setBackgroundColor(getResources().getColor(R.color.colorPrimary));
                contentView.addView(view);
            } else if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
                getWindow().addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS);
    
                int statusBarHeight1 = -1;
                //获取status_bar_height资源的ID
                int resourceId = getResources().getIdentifier("status_bar_height", "dimen", "android");
                if (resourceId > 0) {
                    //根据资源ID获取响应的尺寸值
                    statusBarHeight1 = getResources().getDimensionPixelSize(resourceId);
                }
    
                //设置contentview为fitsSystemWindows
                ViewGroup contentView = (ViewGroup) findViewById(android.R.id.content);
                View childAt = contentView.getChildAt(0);
                if (childAt != null) {
                    childAt.setFitsSystemWindows(true);
                }
                //给statusbar着色
                View view = new View(this);
                view.setLayoutParams(new ViewGroup.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT,statusBarHeight1));
                view.setBackgroundColor(getResources().getColor(R.color.colorPrimary));
                contentView.addView(view);
            }
    

    对于5.0以上的系统,状态栏可以直接调用API去实现。

    getWindow().setStatusBarColor(getResources().getColor(R.color.trans));
    

    对于6.0以上的系统,部分机型可以直接调用API去改变状态栏图标的颜色。

    相关文章

      网友评论

          本文标题:Android4.4以上沉浸式状态栏的简单适配

          本文链接:https://www.haomeiwen.com/subject/hleyxqtx.html