需求
MainActivity中包含五个Fragment,但是只要求HomeFragment实现沉浸式,其余Fragment不实现沉浸式,保持原来的模样
注意:仅Android21及其以上系统支持
思路
前提:沉浸式只能作用在Activity上!
思路1
思路步骤
- 使MainAcitivity实现沉浸式,此时所有Fragment页面都将实现沉浸式;
- 为每一个Fragment页面新增一个View,此处需要注意布局方式(FrameLayout布局可能比较难处理);
- 为每一个Fragment实现新增View的高度和背景色。
实现步骤
1、使MainAcitivity实现沉浸式:
StatusBarUtil.setStatusBarTransparent(activity);复制代码
2、 为每一个不需要实现沉浸式的Fragment页面新增一个View:
复制代码
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中加入下面代码:
@Overridepublic void onHiddenChanged(boolean hidden) { super.onHiddenChanged(hidden); if (hidden) { StatusBarUtil.hideStatusView(activity, false); } else { StatusBarUtil.hideStatusView(activity, true); }}复制代码
优缺点
- 优点:可集成为一个工具类,不需要在Fragment中新增代码。
- 弊端:需要变化
topMargin
的值,导致页面有细微的滑动。
思路3
还在搜索中......