博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
探索 单个Fragment实现沉浸式,其余Fragment不实现的解决办法
阅读量:6162 次
发布时间:2019-06-21

本文共 1246 字,大约阅读时间需要 4 分钟。

需求

MainActivity中包含五个Fragment,但是只要求HomeFragment实现沉浸式,其余Fragment不实现沉浸式,保持原来的模样

注意:仅Android21及其以上系统支持

思路

前提:沉浸式只能作用在Activity上!

思路1

思路步骤

  1. 使MainAcitivity实现沉浸式,此时所有Fragment页面都将实现沉浸式;
  2. 为每一个Fragment页面新增一个View,此处需要注意布局方式(FrameLayout布局可能比较难处理);
  3. 为每一个Fragment实现新增View的高度和背景色。

实现步骤

1、使MainAcitivity实现沉浸式:

StatusBarUtil.setStatusBarTransparent(activity);复制代码

2、 为每一个不需要实现沉浸式的Fragment页面新增一个View:

复制代码

3、为每一个不需要实现沉浸式的Fragment实现新增View的高度和背景色:

StatusBarUtil.setStatusViewAttr(view, activity);复制代码

优缺点

  • 优点:可控性高;并且在布局文件中静态实现了高度和背景色,不需要实时计算(此点相对于 思路2 而言)。
  • 弊端:需要给每个不想实现沉浸式的Fragment页面新增多余且相似的代码。

思路2

思路步骤

  1. 使MainAcitivity实现沉浸式,此时所有Fragment页面都将实现沉浸式;
  2. 获得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

还在搜索中......

源码

转载地址:http://ghefa.baihongyu.com/

你可能感兴趣的文章
ROM制作,专属个性的亮光点
查看>>
oracle 体系结构初步认识(一)
查看>>
spring boot (二) web swagger2
查看>>
我的友情链接
查看>>
Oracle数据库对象 序列
查看>>
桌面虚拟化之用户体验篇
查看>>
Nginx如何配置静态文件过期时间
查看>>
【Linux学习记录】Linux文件属性权限、目录管理
查看>>
6.4-全栈Java笔记:异常处理办法(下)
查看>>
Ceilometer的知识总结
查看>>
jQuery最佳实践
查看>>
python核心编程-第六章-个人笔记(二)
查看>>
RHCE系列之权限管理----ACL(访问控制列表)
查看>>
MooseFS灾备演练实录
查看>>
在OL6.5_64上安装Oracle11gR2_64
查看>>
Oracle 冷备份详解【实战案例】
查看>>
MongoDB 聚合管道(Aggregation Pipeline)
查看>>
我的友情链接
查看>>
Linux I2C设备驱动编写(二)
查看>>
nginx+tomcat+msm实现seesion共享
查看>>