寫這個(gè)的來源:公司需要實(shí)現(xiàn)透明狀態(tài)欄滤蝠,狀態(tài)欄顏色隨著頁面切換而改變,虛擬按鍵不變昆码!
OK,拿到這個(gè)需求的時(shí)候邻储,so easy 赋咽!打開github!搜索statusbar,選了這3k的statusbar! 導(dǎo)入項(xiàng)目后吨娜,
- 在4.4上跑起來完美實(shí)現(xiàn)了脓匿!
- 再拿到6.0的機(jī)子上跑,什么鬼:虛擬按鍵怎么把底部按鈕給擋谆略陪毡!
不能忍C啄浮!U绷稹铁瞒!
解決方式 :按照作者readme 修改!還是不行绊起!修改源碼精拟,不行!J帷蜂绎!傷心不已!
-
開啟google 笋鄙,baidu模式师枣!一堆的說改這改那的,實(shí)踐后萧落,我內(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);
最后形成一個(gè)方法:
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)用