Android笔记-NavigationBar显示流程

一,修改系统变量。 
打开目录下文件:alps/device/mediatek/工程名字/system.prop 
修改变量值:qemu.hw.mainkeys=0 
qemu.hw.mainkeys=1 表示隐藏Navigationbar 
qemu.hw.mainkeys= 0 表示显示Navigationbar 

二,修改配置文件。
修改config文件中的 config_showNavigationBar的值。 
隐藏Navigationbar:
false 将这个配置信息修改为false即可。
显示Navigationbar:
true 将这个配置信息修改为true即可。
修改config文件中的 config_showNavigationBar的值目录如下:

如果下面目录文件覆盖了config_showNavigationBar,则修改config_showNavigationBar值。
(alps\device\mediatek\common\overlay\navbar\frameworks\base\core\res\res\values\config.xml)
否则,修改下面目录config.xml文件的config_showNavigationBar值。

(alps/frameworks/base/core/res/res/values/config.xml)

MTK有集成相关配置,我们只需要修改配置值即可。也可以定位代码手动隐藏或显示。

三,虚拟按键的显示原理及流程

./SystemUI/src/com/android/systemui/statusbar/phone/PhoneStatusBar.java

该类控制Navigation的相关代码。在start()方法中,NavigationBar被添加进去:

Android笔记-NavigationBar显示流程_第1张图片


在addNavigationBar()具体是实现方法中可以看出来,Navigationbar实际上是windowmanager向Window窗口里添加了一个view。

Android笔记-NavigationBar显示流程_第2张图片

在调用addNavigationBar()方法之前会回调start()的父方法super.start()来判断是否要添加NavigationBar。在super.start()的调用父类方法里会调用createAndAddWindows(),该方法会判断是否需要显示NavigationBar,然后决定是否要实例化NavigationBarView.

Android笔记-NavigationBar显示流程_第3张图片

Android笔记-NavigationBar显示流程_第4张图片

WindowManagerService类实现了WindowManagerPolicy的接口,所以WindowManagerService会回调WindowManagerPolicy的hasNavigationBar()接口。Policy实际上调用的是PhoneWindowManager实现的hasNavigationBar()方法:
   public boolean hasNavigationBar(){
       return mHasNavigationBar;
   }

而mHasNavigationBar的赋值可以在PhoneWindowManager中的setInitialDisplaySize(Display display, int width, int height, int density)方法中找到:

Android笔记-NavigationBar显示流程_第5张图片

可以看出mHasNavigationBar的值的设定是由两处决定的:

1,在系统的资源文件中取设定值config_showNavigationBar,frameworks/base/core/res/res/values/config.xml

2,系统要获取“qemu.hw.mainkeys”的值,这个值可能会覆盖上面获取到的mHasNavigationBar的值。

综上,隐藏虚拟按键:

1、在OnCreate方法中,myview.setSystemUiVisibility(View.SYSTEM_UI_FLAG_HIDE_NAVIGATION),此时该Activity显示时会自动隐藏Navigation Bar,但有触摸事件时重新显现。
2、在build.prop文件中,将qemu.hw.mainkeys取值为1,qemu.hw.mainkeys=1隐藏,qemu.hw.mainkeys=0显示。
3、还可以将NavigationBar的高度设置为0,虚拟按键也能隐藏。在framework/base/core/res/res/values/dimens.xml,在其中把Navigation的配置改成0。
0dp
0dp







你可能感兴趣的:(Android笔记-NavigationBar显示流程)