Android 8.0 SystemUI(三)——StatusBar

本文深入探讨了Android 8.0中的SystemUI,特别是StatusBar的启动和布局。从StatusBar.start()开始,分析createAndAddWindows()方法,接着详细讲解makeStatusBarView()函数,包括inflateStatusBarWindow()和createNavigationBar()。同时,重点讨论了status_bar和system_icons布局的设计。
摘要由CSDN通过智能技术生成

状态栏与导航栏的启动由StatusBar.start()完成

/frameworks/base/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBar.java
    @Override
    public void start() {
        mNetworkController = Dependency.get(NetworkController.class);
        mUserSwitcherController = Dependency.get(UserSwitcherController.class);
        mScreenLifecycle = Dependency.get(ScreenLifecycle.class);
        mScreenLifecycle.addObserver(mScreenObserver);
        mWakefulnessLifecycle = Dependency.get(WakefulnessLifecycle.class);
        mWakefulnessLifecycle.addObserver(mWakefulnessObserver);
        mBatteryController = Dependency.get(BatteryController.class);
        mAssistManager = Dependency.get(AssistManager.class);
        mSystemServicesProxy = SystemServicesProxy.getInstance(mContext);
        mOverlayManager = IOverlayManager.Stub.asInterface(
                ServiceManager.getService(Context.OVERLAY_SERVICE));
        mColorExtractor = Dependency.get(SysuiColorExtractor.class);
        mColorExtractor.addOnColorsChangedListener(this);
        mWindowManager = (WindowManager) mContext.getSystemService(Context.WINDOW_SERVICE);
        mForegroundServiceController = Dependency.get(ForegroundServiceController.class);
        mDisplay = mWindowManager.getDefaultDisplay();
        updateDisplaySize();
	......
	//创建状态栏与导航栏的窗口
        createAndAddWindows();
	......
    }

跟踪createAndAddWindows():

/frameworks/base/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBar.java
    public void createAndAddWindows() {
        addStatusBarWindow();
    }
    private void addStatusBarWindow() {
        makeStatusBarView();
	//创建StatusBarWindowManager对象
        mStatusBarWindowManager = Dependency.get(StatusBarWindowManager.class);
        mRemoteInputController = new RemoteInputController(mHeadsUpManager);
	//调用它的add()函数为StatusBar创建窗口,包括窗口的大小、位置、是否透明等属性。getStatusBarHeight()为StatusBar的高度,由com.android.internal.R.dimen.status_bar_height确定
        mStatusBarWindowManager.add(mStatusBarWindow, getStatusBarHeight());
    }

先来分析makeStatusBarView()函数:

protected void makeStatusBarView() {
    final Context context = mContext;
	//获取屏幕参数
    updateDisplaySize(); // populates mDisplayMetrics
	//更新Panels资源数据,statusbar包含很多panel,在创建PhoneStatusBarView时需要更新panel数据
    updateResources();
    updateTheme();
    //引入StatusBarWindowView布局
    inflateStatusBarWindow(context);
 	//statusbarwindow
    mStatusBarWindow.setService(this);
	//设置触摸事件监听器
    mStatusBarWindow.setOnTouchListener(getStatusBarWindowTouchListener());
    // TODO: Deal with the ugliness that comes from having some of the statusbar broken out
    // into fragments, but the rest here, it leaves some awkward lifecycle and whatnot.
    mNotificationPanel = (NotificationPanelView) mStatusBarWindow.findViewById(
            R.id.notification_panel);
    mStackScroller = (NotificationStackScrollLayout) mStatusBarWindow.findViewById(
            R.id.notification_stack_scroller);
    mNotificationPanel.setSt
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值