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就已经建立