Android 沉浸式状态栏实现

Android 沉浸式状态栏实现

如果不注意发现的话,一开始我是不知道有这种功能的,后来在使用Google Play商店的时候,发现他的banner图片轮播的时候,状态栏的颜色是会跟着发生改变的,于是搜索,才知道了有这么个沉浸式状态栏。
效果如下:

这里写图片描述

一开始的解决方案

本来想设置状态栏的颜色为半透明色,然后通过 android:fitsSystemWindows="true"来实现相应的效果,却发现一点效果都没有,组件完全没有往上腾。这让我找不到头脑,后来百度发现根组件不同,实现的方法也不同,可能这是一个原因。这就更需要学习查阅相关知识了。

百度的第一个解决方案

1.修改主题属性
values-v19之后的主题属性中添加一条即可,如下

<item name="android:windowTranslucentStatus">true</item>

本着凡事都要学习本质,来查询一下文档来看看这个属性,发现这个属性是安卓4.4才加入的属性。来看看官方怎么描述这个属性
>

如果您要创建自定义主题背景,则将其中某个背景设置为父主题背景,或在您的主题背景中添加 windowTranslucentStatus样式属性。
通过启用透明系统状态栏,您的布局将填充系统状态栏后面的区域,因此,您也必须为不应被系统状态栏覆盖的布局部分启用 fitSystemWindows

看完这段话,大概就明白了,如果设置了该属性,相当于会将状态栏所占空间都给去掉,只是有一个半透明的空壳在屏幕的最顶端,这样的话会导致所有的控件都往上移动,这会导致一个问题,如下图:
这里写图片描述
这显然不是我们想要的效果,这就可以看到谷歌已经给我们想好了办法就是 android:fitSystemWindows 属性,而这个属性再来官方怎么描述这个属性
>

如果属性值为true,调整view的padding来留下空间给system windows

那这个system windows是什么东西?经过查阅可以知道 System windows 指的就是屏幕上 status bar、navigation bar等系统控件所占据的部分。所以这个属性的作用就是通过设置view的padding,使得应用的content部分(Activitt中有一个setContentView()方法中传入的就是content)不会与system window重叠。
但是要注意一个问题,如果你对一个View设置了改属性,那么对该View设置的其他padding都通通无效。在上图的程序设置后效果如下图:
这里写图片描述
而这个padding是比较智能的,可以看到paddingBottom应该也被调整了。

2.设置fitsSystemWindows属性
所以第二步就很明显了,这样就能将View的图像显示在状态栏下
注意:如果你在同一个布局中添加了多个这个属性,那么一般只有最外层View的这个属性生效

3.调整View高度
举个例子,如果对ToolBar设置上述两步,一般会出现下图情况:
这里写图片描述
一般比较喜欢的处理方式是在java代码中动态改变高度

mToolbar = (Toolbar) findViewById(R.id.toolbar);

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT)
{
      mToolbar.getLayoutParams().height = getAppBarHeight();
      mToolbar.setPadding(mToolbar.getPaddingLeft(),
            getStatusBarHeight(),
            mToolbar.getPaddingRight(),
            mToolbar.getPaddingBottom());
}

setSupportActionBar(mToolbar);

如果要在XML中定义,要区分版本。安卓6.0之前的系统状态栏是24dp,之后都是25dp。

百度的第二个解决方案

是主要讲述如何兼容到4.4的一些方案,写的也非常好,这里就不细述了
http://www.open-open.com/lib/view/open1455584716230.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值