View.inflate与LayoutInflater

时间:2014-05-28 10:22:20

标签: android

使用LayoutInflater和静态方法View.inflate()的主要区别是什么?使用它们中的任何一个是否有任何缺点,或者它们可能用于不同的目的?

3 个答案:

答案 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

初始化此视图时,此方法很有用