AndroidView绘制流程一(View添加流程)

本文深入探讨了Android中Activity的setContentView()方法如何将View添加到界面的过程。从Window对象的PhoneWindow类开始,详细介绍了初始化DecorView、创建父容器mContentParent,以及解析布局资源并将View添加到contentParent的步骤。关键步骤包括installDecor()和generateLayout()方法的执行,特别是FrameLayout ID_ANDROID_CONTENT在布局中的作用。
摘要由CSDN通过智能技术生成

在Activity中,调用setContentView()方法,即可将自定义的View或者布局资源xml文件,添加至界面,那么setContentView()方法具体执行了哪些操作,view又是如何添加上去的呢。
进入Activity的setContentView()方法,发现其调用了getWindow().setContentView()方法,getWindow()返回的是Window对象,而该Window对象的唯一实现类是PhoneWindow。

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

进入PhoneWindow类,找到setContentView()方法,该方法中主要做了以下事情:
1)初始化顶层DecorView
2)创建父容器mContentParent,并添加至DecorView
3)解析传递的布局资源id,并将解析的view添加到contentParent中,从而完成view的添加。

 @Override
    public void setContentView(int layoutResID) {
        if (mContentParent == null) {
        //注释1 此方法中初始化DecorView,创建父容器mContentParent
            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 {
            //注释4 这里解析layoutResID,并添加至mContentParent
            mLayoutInflater.inflate(layoutResID, mContentParent);

        }
        mContentParent.requestApplyInsets
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值