新需求:删除Android 原生自带的虚拟导航按键(暂定)

如想直接删除不显示Navigationbar,可以用如下两个方法

1)在资源xml文件中把导航按键的高度和宽度设置为0

frameworks/base/core/res/res/values/dimens.xml  <dimen name="navigation_bar_height">0dp</dimen><!-- Height of the bottom navigation bar in portrait; often the same as @dimen/navigation_bar_height --><dimen name="navigation_bar_height_landscape">0dp</dimen>

2)PhoneWindowManager.java中会在开机后检测如下两个prop来查看是否需要实现

在配置文件中设置config_showNavigationBar=false
frameworks/base/core/res/res/values/config.xml设置为false
SystemProperties.get("qemu.hw.mainkeys");1为关,0为开

源码判断方法

mHasNavigationBar = res.getBoolean(com.android.internal.R.bool.config_showNavigationBar);// Allow a system property to override this. Used by the emulator.// See also hasNavigationBar().String navBarOverride = SystemProperties.get("qemu.hw.mainkeys");if ("1".equals(navBarOverride)) {mHasNavigationBar = false;} else if ("0".equals(navBarOverride)) {mHasNavigationBar = true;}

*********************动态显示隐藏************************************

码农最怕有些功能删除又要添加,为了方便起见除了在overlay配置外,可以选择发广播或者数据库方式来动态控制显示或者隐藏Navigationbar。我这边选择了在开发者选项中增加了动态显示隐藏开关。

我在开发者选项中增加了显示隐藏开关如图所示

1)先在数据库中增加自己设定的一个字段来显示是否打开关闭虚拟按键

frameworks/base/packages/SettingsProvider/res/values/defaluts.xml
<string name="switch_navigation_bar">false</string>
Java文件中
frameworks/base/packages/SettingsProvider/src/com/android/providers/settings/DatabaseHelper.java注意在settings表中增加
//<mengshirui><17-7-15> modify start
******loadSetting(stmt, "switch_navigation_bar",R.string.switch_navigation_bar);
******

2)在开发者选项的development_prefs.xml布局中添加

        <CheckBoxPreferenceandroid:key="switch_navigationbarview"android:title="@string/switch_navigationbarview"android:persistent="false"/>

3)在DevelopmentSettings.java中实现点击处理逻辑

再onCreate中初始化按钮,获取数据库的值(自定义kay),来显示当前状态是否是打开或关闭状态

//<mengshirui><17-8-2> modify startmNavigationbarView=(CheckBoxPreference) findPreference("switch_navigationbarview");if(null != mNavigationbarView){String isShownav = Settings.System.getString(getContentResolver(), "switch_navigation_bar");mNavigationbarView.setChecked("true".equals(isShownav)?true:false);mNavigationbarView.setOnPreferenceChangeListener(this);Log.i("mengshirui", "AccessibilitySettings.initializeAllPreferences: setChecked"+isShownav);}//<mengshirui><17-8-2> modify end

在onPreferenceChange(Preference preference, Object newValue)方法中实现状态改变修改数据库中的值

//<mengshirui><17-8-2> modify start}else if(preference == mNavigationbarView){boolean auto = (Boolean)newValue;Settings.System.putString(getContentResolver(),"switch_navigation_bar",String.valueOf(auto));return true;
//<mengshirui><17-8-2> modify end

4)在PhoneStatusBar.java中来实现动态添加或者隐藏虚拟按键,可以用接受广播的方式或者监听数据库的变化。

在makeStatusBarView() {SettingsValueChangeContentObserver mNavContentObserver = new SettingsValueChangeContentObserver();mContext.getContentResolver().registerContentObserver(Settings.System.getUriFor("switch_navigation_bar"),true,mNavContentObserver);}
/*** <mengshirui><17-7-15> modify start*/class SettingsValueChangeContentObserver extends ContentObserver{public SettingsValueChangeContentObserver() {super(new Handler());}@Overridepublic void onChange(boolean selfChange) {super.onChange(selfChange);String isShownav = Settings.System.getString(mContext.getContentResolver(), "switch_navigation_bar");if ("true".equals(isShownav)) {if (mNavigationBarView == null) {addNarBar();}if (mNavigationBarView != null) {checkBarMode(MODE_TRANSLUCENT, mNavigationBarWindowState, mNavigationBarView.getBarTransitions());}} else {mWindowManager.removeView(mNavigationBarView);mNavigationBarView = null;}}}private void addNarBar() {if (mNavigationBarView == null) {mNavigationBarView = (NavigationBarView) View.inflate(mContext, R.layout.navigation_bar, null);mNavigationBarView.setDisabledFlags(mDisabled);mNavigationBarView.setBar(this);prepareNavigationBarView();}mWindowManager.addView(mNavigationBarView, getNavigationBarLayoutParams());}//<mengshirui><17-7-16> modify end

如图上的 类似 苹果小圆点 AssistiveTouch触摸助手功能刚开始完善中,过两天会整理一下上传,希望对大家有所帮助

android系统定制开发动态显示隐藏虚拟按键虚拟导航Navigationbar相关推荐

  1. Android系统定制源码修改 - MTK平台

                                         Android系统定制源码修改 -  MTK平台  1.修改开机弹出欢迎使用SIM MTK工程/mediatek/packag ...

  2. 后悔没早点看这篇直播系统定制开发入门篇

    直播想必大家都不陌生了,在互联网的风口下,以及5G技术的推动,流量带宽的提高,使得直播在我们生活中扮演着越来越重要的角色.本文先来讲一下入门直播需要了解的一些基本概念,搜集整理了直播入门需要了解的一些 ...

  3. 为Android系统定制重启功能

    按计划每周更新一篇技术博文,第二篇:<为Android系统定制重启功能> 一.Android系统重启的实现方式 1.广播方式 之前的博文介绍过这种方式<使用广播实现的Android关 ...

  4. cm-14.1 Android系统定制(二):内置系统应用

    声明 Android系统定制时免不了预置一些APP进系统中: 预置的结果一般有三种:       1.预置的APK用户可以卸载,恢复出厂设置后APK不恢复:       2.预置的APP用户可以卸载, ...

  5. 直播系统定制开发中安卓直播间websocket协议破解还原

    前言 现如今在直播系统定制开发中直播间协议很多已经很少使用http轮询的方式获取直播间的弹幕.礼物.关注等,在用的目前知道的是某音的直播,其他的一些app已经使用socket或者websoceket获 ...

  6. 广州O2O分销系统定制开发

    广州市网畅信息技术有限公司研究开发的O2O分销系统定制开发.可以对商家的营销效果进行直观的统计和评估,规避了传统营销模式的推广效果不可预测性,O2O将线上订单和线下消费结合,所有的消费行为均可以准确统 ...

  7. 优惠加油系统定制开发卡密

    现在加油APP系统开发,加油卡系统搭建,油惠多多,现在加油,云掌加油,天天油惠,礼遇油惠,实力开发,功能定制 一.现在加油模式介绍: 1.加油优惠:全国300多个城市,合作油站超10000家.扫现在加 ...

  8. 直播系统定制开发——海量用户实时消息系统架构演进实践

    1.引言 一套完整的直播系统定制开发核心功能有两个: 1)实时音视频的推拉流: 2)直播间消息流的收发(包括聊天消息.弹幕.指令等). 本文主要分享的是百度直播的消息系统的架构设计实践和演进过程. * ...

  9. TOOM网络舆情监控系统定制开发,舆情监控开源系统源码有哪些?

    软件系统定制开发是指为满足客户特定业务需求而进行的软件系统开发工作.这通常涉及到对现有软件系统进行修改或开发新的软件系统来满足客户的特定要求.软件系统定制开发可以帮助客户解决其特定的业务问题,并为客户 ...

最新文章

  1. python2.7安装教程选哪个版本运行ride_RobotFramework-RIDE环境搭建二:Robot Framework-RIDE安装过程以及踩雷点...
  2. be2014备份oracle,veritas be 对oracle10g 备份异机恢复测试
  3. (59)简单介绍RAM IP核类型和接口信号?
  4. 自主巡航——高精度地图制作
  5. 深入解析字符串的比较方法:“==”操作符;String.Equals方法;String.Compare方法;String.CompareOrdinal方法。...
  6. SDWebImage之SDImageCache
  7. 高德地图API总结--地图加载、权限,定位
  8. Adobe Acrobat 如何通过书签制作多级目录
  9. Windows Server 2003 报错:”NTDETECT 失败“ 和 “文件或目录损坏且无法读取,请运行chkdsk工具”
  10. Python实现轮盘抽奖小程序(带界面)
  11. 为什么人工智能工程师被戏称为“调参侠”?
  12. 深入理解Android之Java Security第一部分
  13. Android 面试必备 - 线程
  14. Java的7大设计原则和23种设计模式
  15. 大厂面试题刷屏:一头牛重800kg,一座桥承重700kg,牛如何过桥?
  16. weblogic T3协议(附python脚本)
  17. java三张扑克牌,java第三季综合练习之扑克牌游戏
  18. 毕业设计 手写数字识别算法研究与实现(源码+论文)
  19. trochscript模型初次运行过慢解决方法
  20. O2O:中国地图行业新机遇

热门文章

  1. win+r的快捷操作
  2. 2018-2019 ICPC Northwestern European Regional Programming Contest (NWERC 2018)记录
  3. linux 终端80列_如何从Linux终端列出计算机的设备
  4. 2020年电气试验考试题库及电气试验答案解析
  5. Docker 出了个新玩意:软件物料清单
  6. 热传导偏微分方程的推导
  7. 计算机学院宋威教授,北方工业大学计算机科学与技术研究生导师介绍:宋威
  8. ENVI 5.6软件安装教程
  9. 观察者模式解读厦门建国以来最强台风
  10. 等保三级都需要哪些安全产品?都有哪些作用?