使用LayoutInflater
和静态方法View.inflate()
的主要区别是什么?使用它们中的任何一个是否有任何缺点,或者它们可能用于不同的目的?
答案 0 :(得分:29)
如果查看View.inflate()
的来源,我们会看到:
public static View inflate(Context context, int resource, ViewGroup root) {
LayoutInflater factory = LayoutInflater.from(context);
return factory.inflate(resource, root);
}
因此,在内部,inflate()
类的View
方法使用LayoutInflater
,这使我认为没有区别。
答案 1 :(得分:8)
View.inflate()
会在内部拨打LayoutInflator.inflate(resource, root)
,然后拨打LayoutInflator.inflate(resource, root, root != null)
。第三个参数是booleanAttachToRoot,文档描述为:
是否应将膨胀的层次结构附加到根参数?如果为false,则root仅用于为XML中的根视图创建LayoutParams的正确子类。
换句话说,使用View.inflate()
,您无法告知充气器不将新视图附加到参考根ViewGroup。
答案 2 :(得分:0)
我刚刚遇到问题。这就是我找到的。
View.inflate使用LayoutInflator.inflate(id,Viewparent)。如果Viewparent参数为null,它将忽略父级的layoutparam。
但是。 Inflator.inflate有另一个api inflate(id,View parent,boolean attach)。当您需要使用parent layoutparamter
初始化此视图时,此方法很有用