利用一個第三方庫實現(xiàn)透明孝治,解決了很多異常情況
地址:https://github.com/gyf-dev/ImmersionBar
implementation 'com.gyf.barlibrary:barlibrary:2.3.0'
- 在baseActivity里onCreate()方法里初始化
mImmersionBar = ImmersionBar.with(this);
mImmersionBar
.transparentStatusBar() //透明狀態(tài)欄,不寫默認透明色
.statusBarDarkFont(true) //狀態(tài)欄字體是深色审磁,不寫默認為亮色
.flymeOSStatusBarFontColor(R.color.title_bar_txt) //修改flyme OS狀態(tài)欄字體顏色
.keyboardEnable(false)
.navigationBarEnable(false);
if ((!"Xiaomi".equalsIgnoreCase(getManufacturer())&&
(!"ZTE".equalsIgnoreCase(getManufacturer())))
&&(!"MEIZU".equalsIgnoreCase(getManufacturer()))) {
mImmersionBar.statusBarAlpha(0.2f); //狀態(tài)欄透明度谈飒,不寫默認0.0f
}
KLog.i("手機型號:"+getManufacturer());
mImmersionBar.init();
- 在baseactivity的onDestory()里
if (mImmersionBar != null)
mImmersionBar.destroy(); //必須調(diào)用該方法,防止內(nèi)存泄漏态蒂,不調(diào)用該方法杭措,如果界面bar發(fā)生改變,在不關(guān)閉app的情況下钾恢,退出此界面再進入將記憶最后一次bar改變的狀態(tài)
- 然后其他activity繼承即可手素,布局里別忘了
android:fitsSystemWindows="true"
- 然后這個庫有個問題,就是頁面根布局是RelativeLayout且有輸入框的情況下瘩蚪,輸入法彈出時會把底部的布局頂上來泉懦,或者會多一塊白色黑色布局
- 解決這個問題,此活動就不能使用這個工具做透明工具欄了疹瘦,單獨設(shè)置透明崩哩、白色狀態(tài)欄黑字體樣式了⊙糟澹可以用SystemBarTint這個工具透明邓嘹,設(shè)置顏色。
- 設(shè)置字體黑色可以使用下方代碼:
private void initDarkFont() {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
int uiFlags = View.SYSTEM_UI_FLAG_LAYOUT_STABLE; //防止系統(tǒng)欄隱藏時內(nèi)容區(qū)域大小發(fā)生變化
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP && !OSUtils.isEMUI3_1()) {
uiFlags = View.SYSTEM_UI_FLAG_LIGHT_STATUS_BAR; //android 6.0以上設(shè)置狀態(tài)欄字體為暗色
}
getWindow().getDecorView().setSystemUiVisibility(uiFlags);
}
}
這樣就把所有頁面都能正確透明险胰。