需求
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
还在搜索中......