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:
<bool name=“config_showNavigationBar”>false</bool> 将这个配置信息修改为false即可。
显示Navigationbar:
<bool name=“config_showNavigationBar”>true</bool> 将这个配置信息修改为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被添加进去:



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


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



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

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


可以看出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。
<dimen name="navigation_bar_height">0dp</dimen>
<dimen name="navigation_bar_height_landscape">0dp</dimen>







评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值