美文网首页Android开发经验谈
setContentView背后的故事

setContentView背后的故事

作者: Raven | 来源:发表于2020-04-22 16:57 被阅读0次

    原理

    Activity中的setContentView实际上是执行phoneWindow中的setContentView,将该布局文件,解析成view,作为DecorView的子view

    源码

    Activity

    public void setContentView(@LayoutRes int layoutResID) {
            getWindow().setContentView(layoutResID);
            initWindowDecorActionBar();
        }
    

    PhoneWindiw

    @Override
        public void setContentView(int layoutResID) {
            // Note: FEATURE_CONTENT_TRANSITIONS may be set in the process of installing the window
            // decor, when theme attributes and the like are crystalized. Do not check the feature
            // before this happens.
            if (mContentParent == null) {
                installDecor();
            } else if (!hasFeature(FEATURE_CONTENT_TRANSITIONS)) {
                mContentParent.removeAllViews();
            }
    
            if (hasFeature(FEATURE_CONTENT_TRANSITIONS)) {
                final Scene newScene = Scene.getSceneForLayout(mContentParent, layoutResID,
                        getContext());
                transitionTo(newScene);
            } else {
                mLayoutInflater.inflate(layoutResID, mContentParent); //画重点
            }
            mContentParent.requestApplyInsets();
            final Callback cb = getCallback();
            if (cb != null && !isDestroyed()) {
                cb.onContentChanged();
            }
            mContentParentExplicitlySet = true;
        }
    

    LayoutInflater

    public View inflate(XmlPullParser parser, @Nullable ViewGroup root, boolean attachToRoot) {
            synchronized (mConstructorArgs) {
                ...
                        if (root != null && attachToRoot) {
                            root.addView(temp, params);
                        }
                ...
    
                return result;
            }
        }
    

    相关文章

      网友评论

        本文标题:setContentView背后的故事

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