Navigation Bar开机后显示和隐藏 (一)

现在要说的显示与隐藏,并不是指在开机的时候,这可以在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;
    
}



你可能感兴趣的:(Navigation Bar开机后显示和隐藏 (一))