我们在写安卓应用程序的时候经常要写这一句:
setContentView(R.layout.activity_main);
这一句代表的含义就是将这个Activity的布局设置成指定资源文件,那么我们所看的界面是如何构建的呢?这就要从源码中去分析.
DecorView
DecorView是Window的一个内部类,Window是抽象类,在整个源码中源码中Window只有一个实现类:PhoneWindow,这个类才是activity对应的实际的Window,这个类里面有一个DecorView的引用:
// This is the top-level view of the window, containing the window decor.
private DecorView mDecor;
google工程师为这个变量添加了一段注释,很显然这段解释说明DecroView是window的顶层view视图,也就是Activity里面所有View的根结点,那么我们就从Activity的setContentView方法看看,setContentView这个方法是如何构建整个View的。
Activity里面setContentView的定义:
public void setContentView(int layoutResID) {
getWindow().setContentView(layoutResID);
initActionBar();
}
首先获取和Activity关联的Window,上面已经说了Window实例是PhoneWindow对象,然后通过PhoneWindow对象调用setCon