Android 沉浸式状态栏实现

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

一开始的解决方案

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

百度的第一个解决方案

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

<item name="android:windowTranslucentStatus">trueitem>

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

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

看完这段话,大概就明白了,如果设置了该属性,相当于会将状态栏所占空间都给去掉,只是有一个半透明的空壳在屏幕的最顶端,这样的话会导致所有的控件都往上移动,这会导致一个问题,如下图:
Android 沉浸式状态栏实现_第1张图片
这显然不是我们想要的效果,这就可以看到谷歌已经给我们想好了办法就是 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都通通无效。在上图的程序设置后效果如下图:
Android 沉浸式状态栏实现_第2张图片
而这个padding是比较智能的,可以看到paddingBottom应该也被调整了。

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

3.调整View高度
举个例子,如果对ToolBar设置上述两步,一般会出现下图情况:
Android 沉浸式状态栏实现_第3张图片
一般比较喜欢的处理方式是在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

更多相关文章

  1. Android实现多页左右滑动效果,支持子view动态创建和cache
  2. Android TextView实现跑马灯效果_1_1
  3. Android常用控件的一些属性
  4. Android闹钟设置的解决方案
  5. 那些iOS和Android跨平台解决方案
  6. Android Studio XML布局控件不提示属性以及不换行问题
  7. android中TextView属性方法总结

随机推荐

  1. 【腾讯Bugly干货分享】Android Linker 与
  2. Android开发学习总结(二)——使用Android
  3. [置顶] Android大事记(不断更新中)
  4. [置顶] 如何演示你的App?Android录制Gif动
  5. Android仿微信下拉列表实现(附源码)
  6. android软键盘把页面顶上去
  7. Android 中的DisplayMetrics类的用法
  8. Android 硬件抽象层(HAL)概要介绍和学习计
  9. Android UI框架 Android UI控件类简介 an
  10. Android平台各类恶意软件及病毒概览