一. 介绍
LayoutInflater类 用来加载布局文件,我们通常加载布局的任务都是在 Activity 中 调用 setContentView() 方法来完成的,但其实 setContentView() 内部 还是使用 LayoutInflater类 加载布局的。
二. LayoutInflater
1. 获得 LayoutInflater类实例对象 的两种方式
1 | public static LayoutInflater from(Context context); |
1 | context.getSystemService(Context.LAYOUT_INFLATER_SERVICE); |
2. 使用 LayoutInflater实例对象 加载布局
1 | public View inflate(int resource, ViewGroup root) { |
1 | public View inflate(int resource, ViewGroup root, boolean attachToRoot) ; |
第一个方法的本质还是调用第二个方法。
三个参数的理解:
- resource:布局文件的 id,如 R.layout.XXX
- root:传递一个父布局文件
- attachToRoot:是否给布局文件指定父布局文件
常用的结论:
- 如果root为null,attachToRoot将失去作用,则布局文件最外层设置任何值都没有意义,仅仅是解析布局文件的子View。
- 如果root不为null,attachToRoot设为true,则会给布局文件指定一个父布局,即root。
- 如果root不为null,attachToRoot设为false,则会将布局文件最外层的所有layout属性进行设置,当该view被添加到父view当中时,这些layout属性会自动生效。
- 在不设置attachToRoot参数的情况下,如果root不为null,attachToRoot参数默认为true;如果root为null,attachToRoot参数为false。