我們普通的Activity所有的標題欄顏色風格基本是一致的,所以我們可以將這種單獨的Activity的沉浸式狀態欄放在BaseActivity中實現。但是如果遇到一級欄目的fragment中,且有些fragment中有圖片我們該如何處理呢?先看圖
解決方法:
1.普通的Activity我們採用github上的庫放在BaseActivity來實現.
2.Activity的fragment我們對其每個fragment進行處理:
- Activity全屏顯示
- 設置Activity的主題爲:Theme.AppCompat.Light(如果沒設置爲light設置透明狀態欄時會顯示黑色)
- 設置狀態欄透明
3.這時會出現兩種情況,一種是頂部爲圖片(或佈局背景爲圖片)的fragment實現了圖二的效果,達到了我們的要求,另一種是標題欄和狀態欄混合在一起,文字混亂,我們開始處理這種情況:
- 在當前的fragment中的標題欄上部添加一塊view,使之和狀態欄的高度一致便解決了混合在一起顯示的亂像.
第二步的代碼處理:
//得到當前界面的裝飾視圖
if(Build.VERSION.SDK_INT >= 21) {
View decorView = getWindow().getDecorView();
//讓應用主題內容佔用系統狀態欄的空間,注意:下面兩個參數必須一起使用 stable 牢固的
int option = View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN|View.SYSTEM_UI_FLAG_LAYOUT_STABLE;
decorView.setSystemUiVisibility(option);
//設置狀態欄顏色爲透明
getWindow().setStatusBarColor(Color.TRANSPARENT);
}
第三步的代碼處理:
XML文件:
。。。
<View
android:id="@+id/fillStatusBarView"
android:layout_width="match_parent"
android:layout_height="20dp"
android:background="@color/c2A81EA" />
。。。
高度設置:
/**
* 設置view高度爲statusbar的高度,並填充statusbar
*/
View mStatusBar = view.findViewById(R.id.fillStatusBarView);
LinearLayout.LayoutParams lp = (LinearLayout.LayoutParams) mStatusBar.getLayoutParams();
lp.width = LinearLayout.LayoutParams.MATCH_PARENT;
lp.height = CommonUtils.getStatusBar();
mStatusBar.setLayoutParams(lp);
/**
* 獲取狀態欄高度
* @return
*/
public static int getStatusBar(){
/**
* 獲取狀態欄高度
* */
int statusBarHeight1 = -1;
//獲取status_bar_height資源的ID
int resourceId = getResources().getIdentifier("status_bar_height", "dimen", "android");
if (resourceId > 0) {
//根據資源ID獲取響應的尺寸值
statusBarHeight1 = getResources().getDimensionPixelSize(resourceId);
}
return statusBarHeight1;
}