踩坑之NavigationBar 的隱藏與否

前言

最近在隱藏一個導航欄遇到的一個坑,在這裏記錄下。但願其餘人有看到的,也能夠避免入坑。java

隱藏導航欄

在平常的開發工做中,有時常常會要顯示或者隱藏導航欄,通常這時是經過以下配置項來處理:android

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

這裏能夠經過將config_showNavigationBar設置爲false或者true來達到隱藏或者顯示導航欄的效果。微信

但有時這樣配置並不生效,即設置爲false的時候,導航欄仍然存在,這就可能一個屬性在做怪了。ide

咱們先看下決定導航欄顯示與否的關鍵代碼:this

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的值定義以下;spa

qemu.hw.mainkeys = 0;//mHasNavigationBar爲true,顯示導航欄

qemu.hw.mainkeys = 1;//mHasNavigationBar爲false,隱藏導航欄
複製代碼

互動

若是文章存在錯誤描述,可直接留言,一塊兒探討!code

最後

我在微信公衆號也有寫文章,更新比較及時,有興趣者能夠關注以下公衆號!cdn

相關文章
相關標籤/搜索