Android 删除隐藏NavigationBar (虚拟导航栏)

1,055 阅读2分钟

本文已参与「新人创作礼」活动,一起开启掘金创作之路。

前言

本文基于Android 4.X 编写,请注意

正文

android4.0以后添加了虚拟导航栏(NavigationBar)新特性,就是在手机和平板的屏幕下面添加了(Back返回键,Home键等),但是手机上都有硬性按键,所以我们有时间要去掉或者隐藏掉虚拟按键。

     这些按键其实是button,是android原生自带的,我们可以通过config控制其开和关。对应的config项是:"config_showNavigationBar".

     解决方法一:true------------>true和false控制开关。

                          不同的软件版本,配置文件修改不同,下面以android4.2版本为例。在源码frameworks层有两个            config.xml文件:

     alps\frameworks\base\core\res\res\values\config.xml (1) 和 

     alps\mediatek\custom\project_name\resource_overlay\generic\frameworks\base\core\res\res\values\config.xml(2)

     如果您的源码下只有文件 (1),  那就修改config.xml中的true

     如果您的源码下只有文件 (1)和(2),  那就修改(2) 中config.xml的<bool              name="config_showNavigationBar">true就行了。隐藏就设成false。

                   

     解决方法二:修改framework层NavigationBar显示boolean使其不在屏幕显示。

     修改类位置:frameworks/base/policy/src/com/android/internal/policy/impl的PhoneWindowManager.java

     修改方法:1.修改

                          public boolean hasNavigationBar(){

                                return mHasNavigationBar;

                           }

                         把hasNavigationBar()方法的返回值改成false就行了。

      解决方法二修改过后,手机主屏幕下方会有一个黑色条条,建议使用方法一。

如果以上方法不行 按照下面的方法

在android\frameworks\base\packages\SystemUI\src\com\android\systemui\statusbar\tablet\ 下的TabletStatusBar.java的 addStatusBarWindow() 函数中

 WindowManagerImpl.getDefault().addView(sb, lp);   这句话是就是在把sb 加入到window中 屏蔽掉这句就行了

或者WindowManagerImpl.getDefault().removeView(sb); 也可以移除   其中sb就是  SystemUI的 View  

 完全可以在TableStatusBar.java中搞定的事情。

protected void createAndAddWindows() {
addStatusBarWindow();
addPanelWindows();
hideBar(); //add
}
这样开机就不会显示状态栏,但可以先上拉出来。
如果想永久隐藏可以在frameworks\base\policy\src\com\android\internal\policy\impl\PhoneWindowManager.java中
navVisible |= !mCanHideNavigationBar;
navVisible = false; //add
当然也可以在TableStatusBar.java中去掉showbar的广播接收也可以做到。

终极办法直接干掉导航栏用不现实