删除或添加视图与 ViewStub

Removing or Adding views vs ViewStub

.remove() .addView() 和使用 ViewStub 有什么区别? ViewStub如何提高布局渲染效率?

正如您在 this article 中看到的那样,当您使用 ViewStub 时,您 <include /> 在存根内的布局将不会膨胀,除非需要(设置可见性存根到 VISIBLE 或调用 show())。 优点是,包含的视图 none 将成为视图层次结构的一部分,因此您的视图更轻。

看这个例子: ViewStub 未膨胀:

充气后:

当然,您在这里需要权衡,当您设置 VISIBLE(或 show())时,会发生重新膨胀(仅在 ViewStub 布局上)。

ViewStub在性能上和添加View是一样的。看看 ViewStub.inflate()。它所做的是动态添加视图。

public View inflate() {
    ...
    final View view = factory.inflate(mLayoutResource, parent,
            false);
    ... 
    parent.addView(view, index, layoutParams);
    } else {
        parent.addView(view, index);
    }
    ...
    return view;
}

https://android.googlesource.com/platform/frameworks/base/+/master/core/java/android/view/ViewStub.java