- 沉浸式狀態欄相信大家都不陌生了,相關的文章到處都是,介紹一下一個我覺的比較好的文章,Android 沉浸式狀態欄完美解決方案
Android關於沉浸式狀態欄總結
- 如果有的頁面想要只改變狀態欄的顏色,並不侵入到狀態欄上,相信大部分同學使用android:fitsSystemWindows="true"效果。這個與侵入式的相互矛盾,無法實現侵入到狀態欄,最後在沉浸式的狀態下,添加了一個和狀態欄一樣高的view,完美的解決問題。
/**
* 添加View到狀態欄,在沉浸式狀態下不侵入狀態欄
*/
public static void setStatusBarView(Activity activity) {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
// 生成一個狀態欄大小的矩形
View StatusView = createStatusView(activity);
// 添加statusView到佈局中
ViewGroup decorView = (ViewGroup) activity.getWindow().getDecorView();
decorView.addView(StatusView);
// 設置根佈局的參數
ViewGroup rootView = (ViewGroup) (((ViewGroup) activity.findViewById(android.R.id.content)).getChildAt(0));
rootView.setFitsSystemWindows(true);
}
}
private static View createStatusView(Activity activity) {
int statusBarHeight = getStatusBarHeight(activity);
View view = new View(activity);
LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, statusBarHeight);
view.setLayoutParams(params);
view.setBackgroundColor(Color.TRANSPARENT);
return view;
}