ViewStub 是 dumb and lightweight 视图。它有no dimension,它不绘制任何东西,也不以任何方式参与布局。这意味着 ViewStub 在视图层次结构中非常 cheap to inflate and very cheap to keep。 ViewStub 可以最好地描述为 lazy include。 ViewStub 引用的布局是 inflated and added 到用户界面只有 when you decide 所以。
有时您的布局可能需要很少使用的complex views。无论是项目详细信息、进度指示器还是撤消消息,您都可以通过仅在需要时加载视图来减少内存使用并加快渲染速度。
简单地使用ViewStub 来提高渲染布局的效率。通过使用ViewStub,可以手动创建视图,但不能将其添加到视图层次结构中。在运行时,可以很容易地被充气,而ViewStub被充气,viewstub的内容会被viewstub中定义的布局替换。
ViewStub 只会在您实际使用/需要它时加载,即,当您将其可见性设置为 VISIBLE(实际可见)或 INVISIBLE(仍然不可见,但其大小不可见时) 0 更多)。 ViewStub nice optimization 因为你可以在任何地方拥有一个复杂的layout with tons of small views or headers,并且仍然拥有你的Activity load up really fast。一旦您使用其中一个视图,它就会被加载。
你必须先在布局中添加ViewStub,然后才能将它膨胀到另一个视图。
注意:ViewStub 的一个缺点是它目前不支持要膨胀的布局中的 <merge/> 标签。阿洛斯ViewStub 不能多次使用。同样保持对ViewStub 的长期引用是不必要的,如果需要,最好在膨胀后将其设为空,这样GC 可以吃掉它。
假设您的ViewStub ID 是view_stub。您需要在activity 中执行以下操作:
ViewStub viewStub = (ViewStub) findViewById(R.id.view_stub);
View inflatedView = viewStub.inflate();
ImageButton button = (ImageButton) inflatedView.findViewById(R.id.button);
现在你可以用按钮做任何你想做的事情了 :) 也就是说,inflate 方法返回包含 XML 文件中实际元素的存根布局。
当然,您始终可以拥有onClick XML 属性或者可以动态调用。
Is a ViewStub worth it?
->For the scenarios that you are specifying, I think `ViewStub` will be worth-shot.
请参阅下面有关ViewStub的网址
http://android-developers.blogspot.in/2009/03/android-layout-tricks-3-optimize-with.html
http://developer.android.com/reference/android/view/ViewStub.html
http://developer.android.com/training/improving-layouts/loading-ondemand.html
你可以试试<\include> tag,而不是ViewStub。 <include/> 只会在您的基本 xml 文件中包含 xml 内容,就好像整个事情只是一个大文件一样。这是在不同布局之间共享布局部分的好方法。
Difference between <include> and <ViewStub> in android