Android布局加载方式

1、传统Activity加载布局方式——setContentView()

             初学Android的同学,最先接触的应该就是Eclipse自动创建的“Hello World!”小例程。而setContentView(R.layout.activity_main); 这行代码就是为我们的Activity加载展示布局的。我时常认为,如果把我们的程序比作一把折扇,那么Activity就相当于这把扇子的骨架,而layout布局文件就好比折扇上的花样扇面。我们现在已经对这把扇子的生命周期很清楚了,它何时打开、何时收拢,打开或者收起来调用什么方法我们心里都可以一清二楚。

        但是我们可能还对一点感到好奇,那就是Activity是在什么时候,通过什么方式把他的扇面加载出来的呢?所以我们应该对Activity.setContentView(intresId)这个方法做做探究。在每一个Activity中,都含有一个Window对象,而这个Window对象就提供了标准UI的显示策略和行为策略。Activity对界面布局的管理是都是通过Window对象来实现的。(*这里需要注意的是,Window类是一个抽象类,其并没有实现关键的setContentView()方法,而其子类PhoneWindow实现了。因此Activity是通过其子类的实例来实现界面加载的。

     public void setContentView(@LayoutRes int layoutResID) {
        getWindow().setContentView(layoutResID);
        initWindowDecorActionBar();
     }

            在上述代码中,详细的Window对象对布局的加载细节我们不做赘述。主要是通过循环解析xml文件并将信息解析到内存View对象,布局文件中定义的一个个组件都被顺序的解析到了内存中并被父子View的形式组织起来。

            通过LayoutInflater的inflate方法逐步加载到了内存中,而我们的Activity又持有自身的PhoneWindow的引用,这就相当于我们的Activity持有了我们定义的布局文件的引用,因而Activity的布局文件被加载到了内存中。




参考博客:http://blog.csdn.net/qq_23547831/article/details/51284556

你可能感兴趣的:(Android布局加载方式)