一. 介绍

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
2
3
public View inflate(@LayoutRes int resource, @Nullable ViewGroup root) {
return inflate(resource, root, root != null);
}
1
public View inflate(@LayoutRes int resource, @Nullable 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。

参考文章

Android进阶之View.inflate和LayoutInflater.inflate方法区别