在单个Activity或BaseActivity加入这三个方法即可
/*** colorID 状态栏的颜色,可以是透明* @param colorID*/public void setStatusBarColor(int colorID) {if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {setStatusBarColorLOLLIPOP(colorID);} else if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {setTranslucentStatus(true);SystemBarTintManager tintManager = new SystemBarTintManager(this);tintManager.setStatusBarTintEnabled(true);tintManager.setNavigationBarTintEnabled(true);tintManager.setStatusBarTintColor(getResources().getColor(colorID));}}
@TargetApi(21)private void setStatusBarColorLOLLIPOP(int colorID) {Window window = getWindow();window.clearFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS| WindowManager.LayoutParams.FLAG_TRANSLUCENT_NAVIGATION);window.getDecorView().setSystemUiVisibility(View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN| View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION| View.SYSTEM_UI_FLAG_LAYOUT_STABLE);window.addFlags(WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS);window.setStatusBarColor(getResources().getColor(colorID));window.setNavigationBarColor(Color.TRANSPARENT);}
@TargetApi(19)private void setTranslucentStatus(boolean on) {Window win = getWindow();WindowManager.LayoutParams winParams = win.getAttributes();final int bits = WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS;if (on) {winParams.flags |= bits;} else {winParams.flags &= ~bits;}win.setAttributes(winParams);}
自定义状态栏在一些特定场合会导致一些问题出现,比如windowSoftInputMode失效(登录页软键盘问题)pairscrollview开源控件使用异常(解决scrollview嵌套webView和listview滑动不到底部问题),后面都会介绍解决方法。