寫這個的來源:公司需要實現(xiàn)透明狀態(tài)欄,狀態(tài)欄顏色隨著頁面切換而改變,虛擬按鍵不變!
OK,拿到這個需求的時候,so easy !打開github!搜索statusbar,選了這3k的statusbar! 導(dǎo)入項目后,
- 在4.4上跑起來完美實現(xiàn)了!
- 再拿到6.0的機子上跑,什么鬼:虛擬按鍵怎么把底部按鈕給擋?。?br>
不能忍!?。?!
解決方式 :按照作者readme 修改!還是不行!修改源碼,不行?。。牟灰?!
-
開啟google ,baidu模式!一堆的說改這改那的,實踐后,我內(nèi)心是奔潰的!還是不行!
最后在guolin大俠這里找到方法:if (hasFocus && Build.VERSION.SDK_INT >= 19) { View decorView = getWindow().getDecorView(); decorView.setSystemUiVisibility( View.SYSTEM_UI_FLAG_LAYOUT_STABLE | View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION | View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN | View.SYSTEM_UI_FLAG_HIDE_NAVIGATION | View.SYSTEM_UI_FLAG_FULLSCREEN | View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY); }
既然需求是只變狀態(tài)欄(以下方式api必須>=21)
先清理掉:
window.clearFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS);
然后保留全屏的:
window.getDecorView().setSystemUiVisibility(View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN | View.SYSTEM_UI_FLAG_LAYOUT_STABLE);
接著添加flag:
window.addFlags(WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS);
這樣我們才能對狀態(tài)欄設(shè)置顏色
最后把調(diào)用window.setStatusBarColor(Color.TRANSPARENT);
設(shè)置透明即可
對于4.4 由于沒有window.setStatusBarColor(Color.TRANSPARENT);
所以只需要:window.addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS);
最后形成一個方法:
public static void setTranslucentStatus(Activity activity){
Window window = activity.getWindow();
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
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);
}else if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT){
window.addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS);
}
}
然后在需要的activity或者baseActivity的
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
Utils.setTranslucentStatus(this);
}
一定要在setContentView(R.layout.activity_main);
之前!調(diào)用