踩坑之NavigationBar 的隐藏与否

3,713 阅读1分钟

前言

最近在隐藏一个导航栏遇到的一个坑,在这里记录下。希望其他人有看到的,也可以避免入坑。

隐藏导航栏

在日常的开发工作中,有时经常会要显示或者隐藏导航栏,一般这时是通过如下配置项来处理:

frameworks/base/core/res/res/values/config.xml
<bool name="config_showNavigationBar">false</bool>

这里可以通过将config_showNavigationBar设置为false或者true来达到隐藏或者显示导航栏的效果。

但有时这样配置并不生效,即设置为false的时候,导航栏仍然存在,这就可能一个属性在作怪了。

我们先看下决定导航栏显示与否的关键代码:

frameworks/base/services/core/java/com/android/server/policy/PhoneWindowManager.java

public void setInitialDisplaySize(Display display, int width, int height, int density) {

....
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;
}
....

} 看到这里,就明白,当系统中存在属性【qemu.hw.mainkeys】时,config_showNavigationBar这个配置就无效了,因为它会被【qemu.hw.mainkeys】的值重写。qemu.hw.mainkeys的值定义如下;

qemu.hw.mainkeys = 0;//mHasNavigationBar为true,显示导航栏

qemu.hw.mainkeys = 1;//mHasNavigationBar为false,隐藏导航栏

互动

如果文章存在错误描述,可直接留言,一起探讨!

最后

我在微信公众号也有写文章,更新比较及时,有兴趣者可以关注如下公众号!