一般來說底部的bar調試被隱藏了的,下面簡介一下
1、修改framework的phonewindowmanager.java文件,這個文件是分配窗口多少的,
對statusbar和Navbar 的frame的計算是在beginLayoutLw() 中,而對於其它的任何Window frame的計算是layoutWindowLw() ,這部分可以通過layoutWindowLw()函數開頭的位置來瞭解到
setInitialDisplaySize()的mHasNavigationBar = true;決定了是否顯示Navbar 狀態欄
beginLayoutLw()的mNavigationBarOnBottom = true;參數決定了是顯示在底部還是側邊欄
這些參數一般都是在frameworks\base\core\res\res\values\下面的文件裏面配置,因爲有的項目會遇到覆蓋文件的現象,有的在device目錄下會覆蓋這個值,我就直接在代碼裏面去設定這個參數的值了,而不是去訪問xml獲取值
上面修改可以把navbar顯示在界面上,對於navbar的顯示和隱藏可以到systemui這個apk裏面去控制
2、systemui
主要修改的是com.android.systemui.statusbar.phone 包的PhoneStatusBar.java文件
2.1顯示和隱藏,通過接受固定廣播實現對外的顯示隱藏控制,顯示和隱藏的主要操作爲如下:
private void xg_ShowNavigationBar() {
if (DEBUG) Slog.v(TAG, "showNavigationBar: about to add " + mNavigationBarView);
if (mNavigationBarView == null){
mNavigationBarView =
(NavigationBarView) View.inflate(mContext, R.layout.navigation_bar, null);
mNavigationBarView.setDisabledFlags(mDisabled);
mNavigationBarView.setBar(this);
}
if(Xg_Bar_Show)return;
prepareNavigationBarView();
mWindowManager.addView(mNavigationBarView, getNavigationBarLayoutParams());
Xg_Bar_Show = true;
}
private void xg_RemoveNavigationBar() {
if (DEBUG) Slog.v(TAG, "removeaddNavigationBar: about to add " + mNavigationBarView);
if (mNavigationBarView == null) return;
if(!Xg_Bar_Show)return;
mWindowManager.removeView(mNavigationBarView);
mNavigationBarView = null;
Xg_Bar_Show = false;
}
2.2 click事件
prepareNavigationBarView() 函數裏面增加click事件,增加click事件之後圖標就可以用了