android studio setcontentview,Android 中的setContentView(R.layout.activity_main)源码解析

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

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

7e7eff8ff64a

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

7e7eff8ff64a

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

7e7eff8ff64a

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

7e7eff8ff64a

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

7e7eff8ff64a

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

7e7eff8ff64a

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

7e7eff8ff64a

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

7e7eff8ff64a

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

7e7eff8ff64a

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

7e7eff8ff64a

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

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值