需求
MainActivity中包含五個Fragment,但是隻要求HomeFragment實現沉浸式,其餘Fragment不實現沉浸式,保持原來的模樣
注意:僅Android21及其以上系統支援
思路
前提:沉浸式只能作用在Activity上!
思路1
思路步驟
- 使MainAcitivity實現沉浸式,此時所有Fragment頁面都將實現沉浸式;
- 為每一個Fragment頁面新增一個View,此處需要注意佈局方式(FrameLayout佈局可能比較難處理);
- 為每一個Fragment實現新增View的高度和背景色。
實現步驟
1、使MainAcitivity實現沉浸式:
StatusBarUtil.setStatusBarTransparent(activity);
複製程式碼
2、 為每一個不需要實現沉浸式的Fragment頁面新增一個View:
<View
android:id="@+id/view_status_bar"
android:layout_width="match_parent"
android:layout_height="0dp"/>
複製程式碼
3、為每一個不需要實現沉浸式的Fragment實現新增View的高度和背景色:
StatusBarUtil.setStatusViewAttr(view, activity);
複製程式碼
優缺點
- 優點:可控性高;並且在佈局檔案中靜態實現了高度和背景色,不需要實時計算(此點相對於 思路2 而言)。
- 弊端:需要給每個不想實現沉浸式的Fragment頁面新增多餘且相似的程式碼。
思路2
思路步驟
- 使MainAcitivity實現沉浸式,此時所有Fragment頁面都將實現沉浸式;
- 獲得DecorView之後,動態的為其子View設定
topMargin
,實現Fragment頁面切換時沉浸
實現步驟
1、使MainAcitivity實現沉浸式:
StatusBarUtil.setStatusBarTransparent(activity);
複製程式碼
2、使預設第一個顯示的Fragment頁面實現沉浸式:
StatusBarUtil.createStatusView(activity);
StatusBarUtil.hideStatusView(activity, true);
複製程式碼
3、使其它Fragment不實現沉浸式,在實現沉浸式效果的Fragment中加入下面程式碼:
@Override
public void onHiddenChanged(boolean hidden) {
super.onHiddenChanged(hidden);
if (hidden) {
StatusBarUtil.hideStatusView(activity, false);
} else {
StatusBarUtil.hideStatusView(activity, true);
}
}
複製程式碼
優缺點
- 優點:可整合為一個工具類,不需要在Fragment中新增程式碼。
- 弊端:需要變化
topMargin
的值,導致頁面有細微的滑動。
思路3
還在搜尋中......