之前一直没怎么去研究这方面的,最近有个项目,让我在沉浸式里面真的沉浸死了,虽然学习了很多,但是还是个沉浸式菜鸟,这里也就记录一些遇到的问题和分享下相关经验吧
需求:
这里是一个侧滑页面和主页面,这个布局必须是占满全屏的
另外一种 需要实现这样的效果,也就是不会顶上去的
实现:
<style name="MyFullScreenTheme" parent="@style/Theme.AppCompat.Light.NoActionBar">
<item name="android:windowTranslucentStatus" tools:targetApi="kitkat">true</item>
<item name="android:statusBarColor" tools:targetApi="lollipop">@android:color/transparent</item>
<item name="android:windowTranslucentNavigation" tools:targetApi="kitkat">true</item>
</style>
直接定义一个这样的主题,activity加入这个主题可以实现第一种需求
至于第二种,当然也可以这样做,但是必须要加个属性android:fitsSystemWindows="true"
这个的意思就是布局在状态栏下面
接下来我用了一个githup上面的
implementation 'com.gyf.barlibrary:barlibrary:2.3.0'//沉浸式状态栏和沉浸式导航栏管理
这个用法也简单,在baseactivity里面添加以下
/**
* 添加这个则会点击edittext的时候讲布局顶上去
* 同时如果edittext的焦点不会被遮挡
* */
private ImmersionBar mImmersionBar;
public void setStatusBar() {
mImmersionBar = ImmersionBar.with(this);
mImmersionBar.statusBarColor(R.color.white)
//原理:如果当前设备支持状态栏字体变色,会设置状态栏字体为黑色,如果当前设备不支持状态栏字体变色,会使当前状态栏加上透明度,否则不执行透明度
.statusBarDarkFont(true, 0.2f)
//使用该属性必须指定状态栏的颜色,不然状态栏透明,很难看
.fitsSystemWindows(true)
//所有子类都将继承这些相同的属性
.init();
}
这样的话所有继承了baseactivity的activity都会实现第二种需求,但是又有其他不一样的,例如需求一那种,这个时候就在需要实现的位置单独添加一种状态
private ImmersionBar mImmersionBar;
public void setStatusBar() {
mImmersionBar = ImmersionBar.with(this);
mImmersionBar.statusBarColor(R.color.transparent)
//原理:如果当前设备支持状态栏字体变色,会设置状态栏字体为黑色,如果当前设备不支持状态栏字体变色,会使当前状态栏加上透明度,否则不执行透明度
.statusBarDarkFont(true, 0.2f)
//使用该属性必须指定状态栏的颜色,不然状态栏透明,很难看
.fitsSystemWindows(false)
//所有子类都将继承这些相同的属性
.init();
}
这样就都实现了。如有疑问请留言