可以把方法寫在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);
===============================================================
收藏:郭霖:Android狀态欄微技巧,帶你真正了解沉浸式模式