Android 从4.4开始引进透明状态栏和导航栏的概念,并且在5.0进行了改进,将透明变成了半透明的效果。虽然此特性最早出现在ios,但不否认效果还是很赞的。
创新互联建站从2013年成立,先为昌邑等服务建站,昌邑等地企业,进行企业商务咨询服务。为昌邑企业网站制作PC+手机+微官网三网同步一站式服务解决您的所有建站问题。
至于4.4以下的手机,就不要考虑此特性了,好在4.4以下的手机份额已经非常小了。
我们先来看一下透明状态栏的实现,两种常见效果图如下:
虚拟导航栏并不是所有的手机都有,华为的手机多比较常见,就是上图屏幕底部按钮那块区域。设置导航栏和状态栏类似:
这是官方的解释,大致意思就是我们在布局的最外层设置 android:fitsSystemWindows="true",会在屏幕最上方预留出状态栏高度的padding。
由于fitsSystemWindows属性本质上是给当前控件设置了一个padding,所以我们设置到根布局的话,会导致状态栏是透明的,并且和窗口背景一样。
但是多数情况,我们并不在根布局设置这个属性,我们想要的无外乎是让内容沉浸在状态栏之中。所以我们经常设置在最上端的图片背景、Banner之类的,如果是Toolbar的,我们可以使用一层LinearLayout包裹,并把这个属性设置给LinearLayout,这样就可以避免Toolbar的内容下沉了。如:
上述方法可以解决普通页面的透明式状态栏需求,如有复杂需求可以参考下面这些:
Android 系统状态栏沉浸式/透明化完整解决方案
Android 沉浸式状态栏的实现
Android沉浸式状态栏(透明状态栏)最佳实现
还有开源库推荐: ImmersionBar
git地址 ,如果对您有帮助,麻烦点个赞~ 谢谢~
框架设计思想
需求分析
实现思路
通过resetHeight达到底部凸起效果
外部容器封装
方法一:隐藏
Android中布局内容被底部系统导航栏遮挡
方法二:内容上移
Android手机底部NavigationBar挡住界面的解决方法
在 Manifest.xml 文件中设置 Activity 的属性
Android布局界面隐藏顶部导航栏
Android隐藏和显示虚拟导航栏
Android 获取手机存储总大小,系统占用空间
Android 获取屏幕宽度和高度的几种方法
Android 获取电池相关信息
Android电量计重要的类及函数介绍
安卓5.0后获取所有运行的进程信息
Android获取内存(RAM)大小信息
android 几种杀进程的方式
Android开发中 获取App缓存大小以及清除缓存
Looper.getMainLooper()使用误区
Android中通过资源文件获取drawable的几种方法
Fragment向Activity传递值
注意:
xxx耀10上面...底部漏出来了。另外一个项目也是类似弹窗,但是没有这个问题。
然后对比了下这个风格文件,发现是 是否悬浮在Activity之上 的问题:
item name="android:windowIsFloating"true/item设置为true就行了。
不过发现一个现象就是当锁屏再打开的时候显示就又正常了...也就是在某个生命周期里面做了一些事情(具体的先不管了哈。记录下...)
使用风格文件的地方:
正在思考自己尝试封装弹窗(计划包括分享弹窗,更新弹窗,奖励弹窗等,逐步来)。这个大概是自定义View差不多了再开始尝试搞....感觉从开始学习了好久,才完成了个人计划的一小半....
咳咳,答应过年增加新功能的,没想到拖到现在,延迟了一个来月,尴尬,尴尬
那个,我们先忽略这尴尬的事情吧,进入正题才是最重要滴
老规矩,先上效果图:
跟原来的图有个很明显的区别,你们也一定都发现了,对不对。那么显眼的小红点,一定都看到了吧。
当然除了这个,还增加了一项功能,虽然不是很明显,但相信也有小伙伴发现了吧,截图的这俩手机屏幕明显大小不同,但是底部导航栏的大小还是相差不大滴。
是的,你们没有看多,这次不仅增加了小红点功能,还增加了底部导航栏的适配,你没有听错,以后底部导航栏也不用那些dp、sp了,都按照UI妹子们标注的px来就可以了,再也不用为了底部导航栏去跟UI妹子解释啥叫dp了。
好了,效果图展示完了,现在该进入枯燥的使用介绍了。
由于这次改动有点大,所以,先介绍下上个稳定版本的用法,到底是用最新的,还是用原来的,就看各位小伙伴的意愿了
上个稳定版本是1.1.3的,引用方式如下
compile 'com.hjm:BottomTabBar:1.1.3'
具体用法如下(备注都加好了,我也就不多废话了):
最新版本是1.2.2的,引用方式如下
compile 'com.hjm:BottomTabBar:1.2.2'
其实1.2.0与1.1.3区别并不大,只有4点改动:
现在默认的,分割线高度都是设置的1个像素。这里以后也固定都用这个默认的高度了,不再对外提供修改的方法。
这就是新增加的适配了,多的也不说了,你们都懂的
标准尺寸,就是UI妹子给你提供的效果图的屏幕尺寸,只要在init()方法里添加上标准尺寸,你就可以放肆的使用px了
这个方法就是控制小红点显示的方法了,index就是需要显示或者隐藏小红点的TabItem,isShow是一个boolean类型的参数,他是控制小红点是否显示的,如果为true,就会显示小红点;如果为false,就会隐藏小红点
1.2.2版本新增了两个方法
介绍到这里,超简单的底部导航栏,第二阶段就可以告一段落了。以后还会持续优化,完善的。
第三阶段我打算封装一下有中间凸起的底部导航栏,这个功能我本地已经做了,但是封装进去的时候,封装的不理想,这次就没有上线,留作下次了。
最后,再上个 GitHub 地址