现在要说的显示与隐藏,并不是指在开机的时候,这可以在xml中设置,不详述
NavigationBar可以在开机后根据需要显示也隐藏,比如在打开某个应用隐藏,打开另一应用显示
修改步骤:
1) ActivityStack.java中的 resumeTopActivityLocked 是所有启动应用的启动的入口,所以在这里添加进入的入口
2) 在PhoneWindowManager.java中的 mHasNavigationBar 是显示与否的标志,肯定要修改,而这里的修改应该在WindowManagerService.java中进行,因为,WindowManagerService中的mPolicy是操作PhoneWindowManager的接口,这样不会破坏封装,所以1)中要添加调入到WMS中的接口,WMS然后在调入PWM
3) PWM(PhoneWindowManager)中有mStatusBarService,之所以用这个服务,是因为不破坏封装和同步
自己体会
4) StatusBarManagerService 中添加显示消失的接口,同理在Client端也要添加相应的显示和消失接口,
具体 CommandQueue和PhoneStatusBar中
5) PhoneStatusBar中添加显示和消失的逻辑
public void showNavigationBar() {
Xlog.d(TAG, " showNavigationBar ");
if (mNavigationBarView == null) {
try {
boolean showNav = mWindowManagerService.hasNavigationBar();
if (DEBUG) Slog.v(TAG, "hasNavigationBar=" + showNav);
if (showNav) {
mNavigationBarView =
(NavigationBarView) View.inflate(mContext, R.layout.navigation_bar, null);
mNavigationBarView.setDisabledFlags(mDisabled);
mNavigationBarView.setBar(this);
}
mWindowManager.addView(mNavigationBarView, getNavigationBarLayoutParams());
} catch (RemoteException ex) {
// no window manager? good luck with that
}
}
}
public void hideNavigationBar() {
Xlog.d(TAG, " hideNavigationBar ");
if ( mNavigationBarView != null) {
mWindowManager.removeView(mNavigationBarView);
}
mNavigationBarView = null;
}