天天看點

系統狀态欄設定背景顔色和APP标題欄一緻(非全屏)

可以把方法寫在BaseActivity中

public void initSystemBar(Boolean isLight) {
        if (Build.VERSION.SDK_INT >= 21) {
            //LAYOUT_FULLSCREEN 、LAYOUT_STABLE:讓應用的主體内容占用系統狀态欄的空間;
//            View decorView = getWindow().getDecorView();
//            int option = View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN
//                    | View.SYSTEM_UI_FLAG_LAYOUT_STABLE;
//            decorView.setSystemUiVisibility(option);
//            getWindow().setStatusBarColor(Color.TRANSPARENT);
            Window window = getWindow();
            //取消設定透明狀态欄,使 ContentView 内容不再覆寫狀态欄
            window.clearFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS);
            //需要設定這個 flag 才能調用 setStatusBarColor 來設定狀态欄顔色
            window.addFlags(WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS);
            //設定狀态欄顔色
            if (isLight) {
                window.setStatusBarColor(getResources().getColor(R.color.white));
            } else {
                window.setStatusBarColor(getResources().getColor(R.color.common_title_bg));
            }

            //狀态欄顔色接近于白色,文字圖示變成黑色
            View decor = window.getDecorView();
            int ui = decor.getSystemUiVisibility();
            if (isLight) {
                //light --> a|=b的意思就是把a和b按位或然後指派給a,   按位或的意思就是先把a和b都換成2進制,然後用或操作,相當于a=a|b
                ui |= View.SYSTEM_UI_FLAG_LIGHT_STATUS_BAR;
            } else {
                //dark  --> &是位運算裡面,與運算,  a&=b相當于 a = a&b,  ~非運算符
                ui &= ~View.SYSTEM_UI_FLAG_LIGHT_STATUS_BAR;
            }
            decor.setSystemUiVisibility(ui);
        }
    }
           

在Activity裡onCreate方法中(寫在setContentView後)

super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_mine_login);
        initSystemBar(true);
           
系統狀态欄設定背景顔色和APP标題欄一緻(非全屏)

===============================================================

系統狀态欄設定背景顔色和APP标題欄一緻(非全屏)

收藏:郭霖:Android狀态欄微技巧,帶你真正了解沉浸式模式