在安卓中,<include>和<ViewStub>有什么区别?

27

<\include>标签和<\ViewStub>标签有什么区别,设计布局时应该选择哪一个更好呢?

4个回答

37
< include />标签将xml内容作为整体文件的一部分包含在您的基本xml文件中,就好像整个东西是一个单独的大文件。这是在不同布局之间共享布局部件的一种好方法。
< ViewStub />有点不同,因为它不是直接包含的,只有在实际使用/需要时才会加载,即当您将其可见性设置为VISIBLE(实际可见)或INVISIBLE(仍未可见,但其大小不再为0)。这是一种很好的优化方式,因为您可以拥有具有大量小视图或任何标题的复杂布局,并且仍然可以快速加载Activity。一旦您使用其中一个视图,它将被加载。

1
你可以将一个视图的可见性设置为“true”吗?VISIBLEINVISIBLEGONE 不是视图的唯一可见性选项吗?视图仅在可见时加载,还是在不为GONE时也会加载? - RestInPeace
1
@RestInPeace 确实,我不确定为什么写了那个(现在已经过去3年了...)。从文档中可以看到:“当可见性设置为VISIBLEINVISIBLE时,会调用inflate()方法,并将此StubbedView替换为其父布局中的充气布局资源。”。因此,只要可见性不是GONE,就会进行充气操作。 - Gregory
感谢您的澄清。 - RestInPeace
但是,我可以使用带有可见性的include,那么ViewStub相比之下有什么优势?!! - Muhammed Refaat
@Gregory:抱歉,我是在回复你的帖子被标记后才注意到这篇文章已经很旧了。 - Matt

14

5
使用 Android 的 tag,分享和重复使用布局非常容易,但有时会变得过于简单,可能会导致用户界面包含大量的视图,其中一些很少使用。幸运的是,Android 提供了一个非常特殊的小部件称为 ViewStub,它为您带来所有不污染用户界面的稀有视图的好处。
ViewStub 是一种愚蠢而轻量的视图。它没有尺寸,不绘制任何内容,也不以任何方式参与布局。这意味着 ViewStub 很便宜地充气并且在视图层次结构中保持良好。可以最好地将 ViewStub 描述为懒惰包含。只有在您决定时,才会充气并将所引用的布局添加到用户界面中。

http://android-developers.blogspot.com/2009/03/android-layout-tricks-3-optimize-with.html - Zyoo

0
另一个重要的区别与布局填充有关。使用XML静态填充的布局无法更改,必须替换视图并通过编程方式设置所有布局参数。 但使用动态填充,则可以在运行时定义(例如)高度、宽度等,并填充不同的布局。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接