View.inflate与LayoutInflater

问题很简单 – 使用LayoutInflater和静态方法View.inflate()的主要区别是什么? 使用它们中的任何一个都有什么缺点,或者它们有不同的用途?

如果查看View.inflate()的源代码,我们可以看到:

 public static View inflate(Context context, int resource, ViewGroup root) { LayoutInflater factory = LayoutInflater.from(context); return factory.inflate(resource, root); } 

所以在内部, View类的LayoutInflater inflate()方法使用了LayoutInflater ,这让我认为没有什么区别。

View.inflate()在内部调用LayoutInflator.inflate(resource, root) ,后者又调用LayoutInflator.inflate(resource, root, root != null) 。 第三个参数是booleanAttachToRoot,文档描述如下:

是否应将膨胀的层次结构附加到根参数? 如果为false,则root仅用于为XML中的根视图创buildLayoutParams的正确子类。

换句话说,使用View.inflate() ,你不能告诉充气机不要把你的新视图附加到参考根ViewGroup上。

我只是从中得到一个问题。 这是我发现的。

View.inflate使用LayoutInflator.inflate(id,Viewparent)。 如果Viewparent参数为null,它将忽略父级的layoutparam。

但。 Inflator.inflate有另一个API膨胀(ID,查看父,布尔附加)。 当您需要使用父布局参数初始化此视图时,此方法非常有用