view 详解 (一) 将view加载到窗口过程分析

本文详细解析了Android中视图的层级结构,包括Window、PhoneWindow、DecorView等核心组件的作用及相互之间的关系,并介绍了Activity如何通过setContentView加载布局。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1.window类

为一个抽象类,提供绘制窗口的一组通用api,可以将之理解为一个载体,各种view在这个载体上显示

2.phoneWindow 

2.1该类继承于window类,是window类的具体实现,我们可以通过该类具体去绘制窗口。

2.2 该类包含了一个DecorView对象,DecorView是所有应用窗口的根view

2.3 简而言之,phonewindow类是吧一个FrameLayout类即DecorView对象进行包装。在phoneWindow 

部分源码


3.DecorView类

3.1 该类是phoneWindow类的内部类,是FrameLayout的子类,是一个装饰的view,比如说title,titleBar,最主要的一点是,它是所有应用窗口的根view


3.2 decorview只有一个子元素为LinearLayout,代表整个应用界面,包含通知栏,标题栏,内容显示栏三块区域

3.3 LinearLayout里面有两个FrameLayout子元素 20,为标题栏显示界面,21为内容显示界面,就是setcontentView()方法载入的布局界面。

4.Activit调用setContentView(intresId)过程


4.1 从上图可以看出,Activity.setContentView(int layoutResId) 是在PhoneWindow(Window的实现类)中完成。

4.2 在phoneWindow的setcontentView(int resId)中,如果setContentView是第一次加载,则会调用installDecor(),此方法是创建DecorView,即根视图,如果不是第一次调用setcontentView,则removeAllViews内容中的所有视图,

这就解释了设置titleBar,是否有标题,是否全屏,都要在setContentView之前执行,因为第一次setContentView,DecorView就已经建立




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值