一般来说底部的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事件之后图标就可以用了