美文网首页unity3D技术分享
Android 中的setContentView(R.layou

Android 中的setContentView(R.layou

作者: 奈文_摩尔 | 来源:发表于2018-12-19 15:24 被阅读882次

        一个Activity在启动的时候,都会在onCreat()方法中执行setContentView(R.layout.activity_main)这行代码,来将指定的资源xml文件加载到对应的activity中,那么它究竟是做了什么操作呢?下面就跟大家一起来看一下源码。(本文所讲是以继承Activity,为例,并不是AppCompatActivity)

    点击setContentView(R.layout.activity_main)这行代码,进入到Activity类里。

    我们发现setContentView实际上是调用的Window的setContentView方法

    继续追踪,getWindow()返回的mWindow为PhoneWindow对象

    好,我们找到PhoneWindow里面的setContentView()方法,注意里面的installDecor()这个方法。在这个方法里new 了一个DecorView对象。

    注意这行代码,将传入的layoutResID加载到mContentParent里面,那么mContentParen又是谁呢?

    我们追踪到installDecor()这个方法里面,发现是generateLayout(mDecor)这个方法赋值。继续追踪这个方法。

    注意这个方法的这里,他将R.layout.screen_simple这个资源xml加载到了DecorView里面

    这就是R.layout.screen_simple这个资源xml,可以看到是一个垂直的线性布局,上面的ViewStub就是咱们的appBar,下面的FrameLayout的id为content!,咱们所加载的activity xml页面就是加载到这个布局里面。

    看一下mDecor.onResourcesLoaded(mLayoutInflater, layoutResource)这行代码:

    root这个View所代表的的就是 R.layout.screen_simple,然后DecorView调用addView将root加载到DecorView里面。最后下图就是我们Android的activity界面的构成,咱们所有的界面都在黄色区域中,FrameLayout的ID为content。

    以上仅为个人整理的笔记,如有错误或者疑问请大家随时指出。

    相关文章

      网友评论

        本文标题:Android 中的setContentView(R.layou

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