位置: 编程技术 - 正文

Android之framework修改底部导航栏NavigationBar动态显示和隐藏

编辑:rootadmin

推荐整理分享Android之framework修改底部导航栏NavigationBar动态显示和隐藏,希望有所帮助,仅作参考,欢迎阅读内容。

文章相关热门搜索词:,内容如对您有帮助,希望把文章链接给更多的朋友!

大家都知道,Android从3.0版本开始就加入了NavigationBar,主要是为那些没有实体按键的设备提供虚拟按键,但是,它始终固定在底部,占用dp的像素高度,尽管从android 4.4开始可以全透明,使用这一部分像素,但三个按钮始终悬浮在屏幕上,这对于有强迫症的朋友来说是无法忍受的。因此,本文的目的就是修改framework部分代码,可以动态隐藏和显示NavigationBar,同时又尽量不影响系统的正常。

主要思路:

在NavigationBar的布局左部加入一个Button(在SystemUI模块实现),点击隐藏NavigationBar,即将NavigationBar从WindowManager中移除掉。需要的时候,通过一个从屏幕底部向上的滑动手势(在policy模块实现)调出NavigationBar。如下两图对比所示:一张为移除前,另一张为移除后。

具体实现:

①.增加按钮实现动态隐藏,主要修改在frameworks/base/packages/SystemUI模块,首先我们增加一个按钮,主要修改

frameworks/base/packages/SystemUI/res/layout/navigation_bar.xml文件,图片资源和字符串我就不提了,具体如下:

接下来修改frameworks/base/packages/SystemUI/src/com/android/systemui/statusbar/phone/NavigationBarView.java,为按钮提供一个接口,具体如下:最后便是在frameworks/base/packages/SystemUI/src/com/android/systemui/statusbar/phone/PhoneStatusBar.java实现点击事件了:到此,隐藏NavigationBar告一段落了。Android之framework修改底部导航栏NavigationBar动态显示和隐藏

②.接下来便是显示NavigationBar,这个修改相对复杂一点。因为此时NavigationBar处于不可见状态,我们无法通过增加按钮的方式让其显示,但是我们知道,状态栏下拉通过手势向下滑动即可。因此很容易便想到通过手势从屏幕底部向上滑动来显示NavigationBar。我的想法是在policy模块中增加一个接口,通过frameworks/base/services/core/java/com/android/server/statusbar/StatusBarManagerService.java服务传递到状态栏中,从而触发显示NavigationBar事件。

也许大家会有疑问,为什么是在policy模块修改?其实我这只是一种解决方案,因为我知道

frameworks/base/policy/src/com/android/internal/policy/impl/PhoneWindowManager.java 有现成的手势滑动接口。其实你也可以SystemUI中增加一个这样的事件,我们需要的就是这么一个触发事件。

PhoneWindowManager.java的修改主要是实现onSwipeFromBottom(竖屏时)和onSwipeFromRight(横屏时)两个接口,然后调用showNavigationBar,在showNavigationBar函数中,我们调用StatusBarManagerService服务中的showNavigationBar函数,具体如下:

这时事件传递到了StatusBarManagerService中,我们来看看StatusBarManagerService.java如何实现showNavigationBar:从上述代码可以看出,StatusBarManagerService只是起到一个传递作用,将消息传递到StatusBar中,最终的实现是在SystemUI模块的frameworks/base/packages/SystemUI/src/com/android/systemui/statusbar/CommandQueue.java,如下所示:

CommandQueue.java收到了这个消息之后,又回调给了base/packages/SystemUI/src/com/android/systemui/statusbar/phone/PhoneStatusBar.java,绕了大半天,消息终于回来了,我们就是需要在PhoneStatusBar.java实现显示NavigationBar的函数了:

需要注意的是:

①显示NavigationBar时,需要重新实例化一次NavigationBarView,我之前有试过移除NavigationBarView后未置空,下次添加时直接使用,会出现状态栏重启的情况,具体原因未知,log显示动画播放错误之类。

②重新添加NavigationBarView时需要恢复NavigationBarView之前的状态,比如说隐藏前时是透明的、显示输入法按钮、菜单键等等。

③本文是在Android5.0的代码上修改的,其他版本未验证。

④本文仅是提供一种思路,并非最优方案。

⑤转载请注明出处:

android学习——定制自己的日志工具 Android中自带的日志工具功能非常强大,但也不能说完全没有缺点,例如在打印日志的控制方面就做的不够好。所以我们在编写一个比较庞大的项目,期

Android中SQLite数据库的使用 SQLite是轻量级的、嵌入式的、关系型数据库,SQLite可移植性好,很容易使用,很小,高效而且可靠。在Android中保存大量数据需要使用到SQLite数据库,下

黑马程序员-Android四大组建之BroadcastReceive广播接收者 ——-android培训、java培训、期待与您交流!———-广播接收者,在android系统中有各种各样的广播,比如来电,短信的接受发送,电池电量的变化都会发

标签: Android之framework修改底部导航栏NavigationBar动态显示和隐藏

本文链接地址:https://www.jiuchutong.com/biancheng/376634.html 转载请保留说明!

上一篇:Android开发--仿腾讯新闻客户端(1)内容列表界面(仿真安卓)

下一篇:android学习——定制自己的日志工具(android学习路线)

  • 固定资产计提减值后可以转回吗
  • 差旅费处理会计分录
  • 为什么征收增值税体现了量益原则
  • 本年收益的会计处理
  • 清算期间作为纳税年度
  • 小规模纳税人未开票收入填在哪里
  • 一个人可以在多家公司任职吗
  • 外管证过期了一个月罚款多少
  • 营业执照办出后多久生效
  • 企业税收滞纳金需要纳税调整吗
  • 发票丢失怎样写说明
  • 收到进项发票如何记账
  • 加油站固定资产折旧年限
  • 非独立核算的分公司如何报税
  • 公司车辆高速费用能开增值税专用发票吗
  • 电子发票没有纳税人识别号有效吗
  • 核定征收的企业需要汇算清缴吗
  • 回单是会计还是出纳职责
  • 计算本月生产成本怎么算
  • 土地闲置费能否扣除
  • 医疗机构免征增值税如何申报
  • 对公工行证书收入摘要写什么
  • 企业没有土地证
  • com2us密码找回
  • 经营资产和金融资产有哪些
  • 暂估成本跨月账务处理
  • service5.exe - service5是什么进程 有什么用
  • 企业车间承包合同的法律效力
  • 什么是摊余成本计量的金融资产
  • 外销收入申报表怎么填
  • 农村自建房买卖怎样才合法
  • 出售报废的边角料收入会计分录
  • 分手我不怕
  • vue兼容性
  • 报销办公用品会计分录计入其他应付还是其他应收
  • 恩智浦杯官网
  • 控制器操作视频
  • canvas软件教程
  • node.js deno
  • ChatGPT 中文调教指南。各种场景使用指南。学习怎么让它听你的话
  • pwd命令的用法
  • 生活垃圾处理费标准
  • html导航链接
  • 小规模附加税减免政策2023
  • 个税没有达到起征点能摇号吗
  • 金税四期对纳税人的影响有哪些
  • 企业银行流水可以不给税务吗
  • 购入车辆发生的费用
  • 破产清算应收账款怎么评估
  • 负债类会计科目新增科目包括
  • 递延所得税如何理解
  • 电子商业承兑汇票的承兑有以下几种方式
  • 建筑行业的收入做什么科目
  • 机动车转让后未过户原车主要承担赔偿责任
  • 应交税费应交增值税借贷方向
  • 接受捐赠可以确认为收入吗
  • 印花税减免税额怎么填
  • 工程结束发票未开全怎么办
  • 实物投资的会计科目
  • 年终建账于年初建账,在录入期初余额时有什么不一样?
  • 准备金支出是否含税
  • 酒店会计科目表
  • sql语句训练题及答案
  • Win10 64位系统下鼠标右键刷新没反应的解决方案
  • win10账户要求必须设置pin什么意思
  • 系统诊断工具命令
  • 在Linux操作系统中哪些命令可以正确关闭系统防火墙
  • mpcmdrun.exe是什么进程
  • win10不兼容游戏名单
  • 禁用强制驱动程序签名有什么用
  • unity link.xml
  • 详解增发万亿国债细节
  • 容易混淆的词汇
  • jquery中用onclick绑定点击事件
  • js获取图片的宽高
  • 怎么用python播放音乐
  • 电子发票冲红期限
  • 临沂二套房契税收费标准2023年
  • 12366的客服辛苦吗
  • 税控ic卡就是税控盘吗
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

    网站地图: 企业信息 工商信息 财税知识 网络常识 编程技术

    友情链接: 武汉网站建设