最近在隱藏一個導航欄遇到的一個坑,在這裏記錄下。但願其餘人有看到的,也能夠避免入坑。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