美文网首页
systemui状态栏

systemui状态栏

作者: 小马要加油 | 来源:发表于2019-10-11 14:38 被阅读0次

    总体结构

    image.png

    状态栏

    mStatusBarView = (PhoneStatusBarView) mStatusBarWindow.findViewById(R.id.status_bar);
    

    在PhoneStatusBar.java中

        @Override
        public void createAndAddWindows() {
            addStatusBarWindow();
        }
    
        private void addStatusBarWindow() {
            makeStatusBarView();
            mStatusBarWindowManager = new StatusBarWindowManager(mContext);
            mRemoteInputController = new RemoteInputController(mStatusBarWindowManager,mHeadsUpManager);
            mStatusBarWindowManager.isHideStatusBar = isHideStatusBar;
            mStatusBarWindowManager.add(mStatusBarWindow, getStatusBarHeight());
        }
    

    看下com/android/systemui/statusbar/phone/StatusBarWindowManager.java的add方法,这里把statusBar父布局加到WindowManager里面

        /**
         * Adds the status bar view to the window manager.
         *
         * @param statusBarView The view to add.
         * @param barHeight The height of the status bar in collapsed state.
         */
        public void add(View statusBarView, int barHeight) {
    
            // Now that the status bar window encompasses the sliding panel and its
            // translucent backdrop, the entire thing is made TRANSLUCENT and is
            // hardware-accelerated.
            mLp = new WindowManager.LayoutParams(
                    ViewGroup.LayoutParams.MATCH_PARENT,
                    barHeight,
                    WindowManager.LayoutParams.TYPE_STATUS_BAR,
                    WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE
                            | WindowManager.LayoutParams.FLAG_TOUCHABLE_WHEN_WAKING
                            | WindowManager.LayoutParams.FLAG_SPLIT_TOUCH
                            | WindowManager.LayoutParams.FLAG_WATCH_OUTSIDE_TOUCH
                            | WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS,
                    PixelFormat.TRANSLUCENT);
            mLp.flags |= WindowManager.LayoutParams.FLAG_HARDWARE_ACCELERATED;
            mLp.gravity = Gravity.TOP;
            mLp.softInputMode = WindowManager.LayoutParams.SOFT_INPUT_ADJUST_RESIZE;
            mLp.setTitle("StatusBar");
            mLp.packageName = mContext.getPackageName();
            mStatusBarView = statusBarView;
            mBarHeight = barHeight;
            mWindowManager.addView(mStatusBarView, mLp);
            mLpChanged = new WindowManager.LayoutParams();
            mLpChanged.copyFrom(mLp);
        }
    

    通知中心

    同样在com/android/systemui/statusbar/phone/PhoneStatusBar.java里面的 addStatusBarWindow()方法里面
    有个makeStatusBarView(),其中有去设置panel的 一些条件

    mNotificationPanel = (NotificationPanelView) mStatusBarWindow.findViewById(R.id.notification_panel);
    mNotificationPanel.setStatusBar(this);
    mNotificationPanel.setGroupManager(mGroupManager);
    

    相关文章

      网友评论

          本文标题:systemui状态栏

          本文链接:https://www.haomeiwen.com/subject/inbgyctx.html