Android 中 LayoutInflater.inflate 方法的参数说明

常用(其他 inflate 方法最终调用)的方法为
public View inflate(@LayoutRes int resource, @Nullable ViewGroup root, boolean attachToRoot)

root 只是用来产生LayoutParams,且类型和 root 是对应的。如 root 为 LinearLayout,则子布局产生的 LayoutParam 参数就是 LinearLayout.LayoutParam 类型的,这时,子布局只能添加到 Linearlayout 的父容器中,如果添加到其他类型容器中,就会报错,即父容器的类型必须和产生子布局 LayoutParam 的 ViewGroup(即方法中的 root) 类型一致。

而 attachToRoot 则是用来决定当前布局是否直接添加到root 里。

过程描述

如果 root != null,则首先会产生子布局的 LayoutParam,即 子布局中设置的参数
此时,如果 attachToRoot == true,则子布局直接会添加到当前容器中,后面不能再调用 addView() 方法;如果 attachToRoot == false,则后面要调用 addView() 方法才会将子布局添加到当前父容器中。

如果 root == null,则无论 attachToRoot == false 还是 true,都要调用 addView(view) 方法,子布局才会显示,且只会按最小的尺寸显示,即 wrap_content。如果想修改子布局的大小,则可以调用有 LayoutParam 参数的 addView 方法。

总结:

1.当 root == null 时必须调用 addView 方法子布局才会显示;
2. 当 root != null 时
attachToRoot == true,则不用且不能调用 addView 方法;
attachToRoot == false,则要调用 addView 方法,且不用传 LayoutParam 参数,子布局就会按 xml 中设置的大小显示。

你可能感兴趣的:(安卓)