AViewStub
是一个dumb and lightweight
视图。它有no dimension
,它不绘制任何东西,也不以任何方式参与布局。这意味着 aViewStub
非常cheap to inflate and very cheap to keep
处于视图层次结构中。AViewStub
可以最好地描述为lazy include
。a 引用的布局ViewStub
仅inflated and added
适用于用户界面when you decide
。
有时您的布局可能需要complex views
很少使用。无论它们是项目详细信息、进度指示器还是撤消消息,您都可以通过仅在需要时加载视图来减少内存使用并加快渲染速度。
简单的 aViewStub
用于提高渲染布局的效率。通过使用ViewStub
,可以手动创建视图,但不能将其添加到视图层次结构中。在运行时,可以很容易地被充气,而ViewStub
被充气时,viewstub
将替换viewstub
.
只有在ViewStub
您实际使用它/需要它时才会加载,即,当您将其可见性设置为VISIBLE
(实际可见)或INVISIBLE
(仍然不可见,但其大小不再为 0)时。ViewStub
anice optimization
因为你可以在任何地方拥有一个复杂的layout with tons of small views or headers
,并且仍然拥有你的Activity load up really fast
. 一旦您使用其中一个视图,它将被加载。
您必须先添加ViewStub
布局,然后才能将其膨胀到另一个视图。
注意:它的一个缺点ViewStub
是它目前不支持<merge/>
布局中的标签被充气。阿洛斯ViewStub
不能多次使用。同样保持对 a 的长期引用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
代替ViewStub
你可以试试<\include> tag
。它将只在您的基本 xml 文件中包含 xml 内容,<include/>
就好像整个事情只是一个大文件一样。这是在不同布局之间共享布局部分的好方法。
android中<include>和<ViewStub>的区别