什么是LayoutInflater
LayoutInflater是一个抽象类,继承自Object,位于android.view包下,作用类似于findViewById()方法,不同的是LayoutInlfater找的是xml布局文件并且将布局文件实例化为对应的控件,而findViewById()找的是具体的widget控件。
什么时候使用LayoutInflater
当我们需要动态载入一个xml布局从而获取其中的控件时,这个时候就需要使用LayoutInflater,但是并不能直接使用,因为这是一个抽象类,我们需要通过其它方法获取LayoutInflater的实例。
LayoutInflater的使用
获取LayoutInflater类的实例有以下几种方式:
- 使用getLayoutInflater()方法,getLayoutInflater()是Activity类中的方法,直接在Activity类中调用
LayoutInflater inflater = getLayoutInflater();
- 使用getSystemService()方法,传入的参数是Context.LAYOUT_INFLATER_SERVICE
LayoutInflater inflater = (LayoutInflater) getSystemService(Context.LAYOUT_INFLATER_SERVICE);
- 使用LayoutInflater.from()方法,这里要传入的参数是当前上下文
LayoutInflater inflater1 = LayoutInflater.from(this);
在得到LayoutInflater的实例以后,需要使用LayoutInflater的inflate()方法加载布局文件,inflate()有以下4种重载方法:
这4种重载方法可以分为2组,一组是通过XmlPullParser作为数据源创建去View对象,另一种是通过resource目录下的文件作为数据来源去创建View对象。
public View inflatae(int resource, ViewGroup root)
参数1为xml文件,参数2为生成的view对象的父控件,如果设置null并且提供了root,则返回root作为根布局,否则,返回填充出的view对象的根布局作为根布局。
public View inflate(int resource, ViewGroup root, boolean attachRoot)
参数1位xml文件,参数3代表是否需要从第一个参数填充成的view对象附着到第二个参数指定的控件上,如果第二个参数为null,也就是不指定父控件,那么新生产的view对象的根布局的某些参数会失效。总结一句话:如果提供了root,且第三个参数为true,则返回root作为根布局,否则,返回填充出的view对象的根布局作为根布局。