多亏了<include />标签,在Android里,很容易就能做到共享和重用UI组件。在Android开发中,很容易就能创建出复杂的UI结构,结果呢,用了很多的View,且其中的一些很少使用。针对这种情况,谢天谢地,Android还为我们提供了一个特别的构件——ViewStub,它可以使你充分享受<include />的好处而不会造成无用View的浪费。

ViewStub是一个看不见的,轻量级的View。它没有尺寸,也不会绘制以及以某种形式参与到布局中来。这意味着ViewStub去inflate以及保留在View层次中的代价是很廉价的。ViewStub最佳的描述称之为“懒惰的include”。ViewStub中引用的布局只在你想添加到UI上时才会显示。

下面的截图来自于Shelves应用程序。图中Activity显示的内容是给用户呈现可浏览的书籍列表:

相同的Activity也用于用户添加或导入新的书籍。在这个操作中,Shelves显示了一个额外的UI。下面的截图显示了在导入期间,会在屏幕的底部显示一个进度表和一个取消按钮:

由于导入书籍不是一个常有的操作,至少相对于浏览书籍列表来说不是,因此,导入panel由ViewStub来承载:

当用户进行一个导入操作时,ViewStub被inflate,此时由它引用的布局文件内容替代显示:

为了使用ViewStub,你所有需要做的是指定android:id特性,便于以后inflate,指定android:layout特性,引用布局文件。ViewStub还允许你使用第三个特性,android:inflatedId,你可以使用它来重写包含的布局文件中的根元素的id。最后,在ViewStub上设定的layout_*参数将会应用到包含的布局文件的顶部。这里有个例子:

当你准备inflate ViewStub时,调用inflate()方法即可。你还可以设定ViewStub的Visibility为VISIBLE或INVISIBLE,也会触发inflate。注意的是,使用inflate()方法能返回布局文件的根View:

有一点需要记住的是:当ViewStub inflate后,这个ViewStub就从View层次中移除了。因此,没有必要保留一个对ViewStub的引用(如在类的字段里)。

ViewStub是快捷编程与高效编程之间的产物。与其手动的inflate View并在运行时添加到View层次上,不如简单的使用ViewStub。它相当“廉价”且易于使用。ViewStub唯一的缺点是现在不支持<merge />标签。

xirihanlin 译于2010.04.23

布局技巧:使用ViewStub相关推荐

  1. PlayMaker布局技巧:预览GUI界面

    PlayMaker布局技巧:预览GUI界面 PlayMaker提供丰富的动作用来构建界面.对于复杂界面,每次通过调试方式查看效果,会非常麻烦.这个时候,开发者可以考虑使用PlayMaker GUI(S ...

  2. CSS之定位布局(position,relative定位布局技巧)

    文章目录 1.什么是定位: 2.各个属性值的描述: 3.各个属性值的具体作用: 4.定位布局技巧:position:relative 与 position:absolute 结合使用: 1.什么是定位 ...

  3. html css图标怎么跟文字并排,CSS高级技巧:精灵图、字体图标、CSS三角做法、CSS用户界面样式、vertical-align属性应用、溢出文字省略号、常见布局技巧...

    CSS高级技巧目录 1.精灵图 使用原因:一个网页往往会有很多小的背景图片作为装饰,为了有效减少接收和发送请求的次数,提供页面加载速度,所以出现了精灵技术.核心原理就是将小图片整合到一张图里,这样浏览 ...

  4. Android实战技巧:ViewStub的应用

    在开发应用程序的时候,经常会遇到这样的情况,会在运行时动态根据条件来决定显示哪个View或某个布局.那么最通常的想法就是把可能用到的View都写在上面,先把它们的可见性都设为View.GONE,然后在 ...

  5. 布局技巧(等高、圣杯)

    1.等高布局 等高布局是指多列子元素在父元素中实现等高视觉效果的布局技巧. 1.1.实现要点(需求) 多列 每一列背景不同 其中任意一列变高,其它列同步变高 1.2.方法一 1.2.1.原理 利用pa ...

  6. PCB布局技巧大汇总-提高PCB抗电磁干扰能力

    PCB布局技巧大汇总 PCB布局技巧大汇总_VX13260562029的博客-CSDN博客 PCB又被称为印刷电路板(Printed Circuit Board),它可以实现电子元器件间的线路连接和功 ...

  7. 内链锚文本布局技巧,原来是这样!

    和SEO打交道这几年的合肥人才网小编觉得,内链在近年来被重视的程度在加深,以前我们在站点优化的过程中,最注意的是外链建设:发的够不够多,百度收录的够不够全,外链发布平台够不够多样化等等.这样的问题,随 ...

  8. CSS权重,属性书写顺序,布局技巧和网页布局总结,盒子模型排列位置---CSS

    文章目录 一.CSS权重 二.CSS属性书写顺序 一.布局总结 二.常见布局技巧 一.CSS权重 注意:类选择器.属性选择器.伪类选择器,权重为 10. 参考看 CSS三大特性,在CSS的特性优先级中 ...

  9. 平面设计版面设计是什么,平面设计图片排版布局技巧有哪些夏雨老师

    平面设计师,要提高自己的版式设计水平,首先需要掌握一定的核心理论知识,让自己具备解构优秀版式设计的能力,你便能从优秀的设计作品中吸取到有用知识.长此以往,便能得到一个正向的进步提升!因此我们首先要知道 ...

最新文章

  1. 生信分析-TBtools绘制热图
  2. python for循环删除
  3. 做机器人,必过的一道坎!
  4. ListView练习_购物商城
  5. HNU 实验七 字符串 E-mail地址
  6. 需求分析报告和需求规格说明书有什么区别
  7. python 对文件夹的相关操作
  8. 中科院计算机和理论物理双硕士白,中科院研究生理论物理怎么不学相对论?
  9. 母函数与指数型母函数模板
  10. CDOJ 1131 男神的礼物 区间dp
  11. 什么表示计算机的存储容量,计算机的存储容量是指它具有的什么
  12. Unity中游戏的存档与读档
  13. css3实现3d图片旋转效果
  14. 嵌入式和java工资对比_嵌入式和java哪个前景好
  15. Nginx配置文件目录实现pdf文件预览及下载
  16. 4x root 红米_红米Note 4X root教程_红米Note4X获取root权限的方法
  17. Java开发人员必须掌握的Linux命令(二)
  18. 主机上没有虚拟机网络适配器VMnet8解决办法
  19. 三种批量插入数据的方法
  20. Csdn修改账户手机绑定问题

热门文章

  1. Java并发编程(十四)并发容器类
  2. OpenGL的简单研究-开端
  3. BZOJ4129: Haruna’s Breakfast
  4. Rhythmk 学习 Hibernate 09 - Hibernate HQL
  5. html5 初试 indexedDB
  6. vb.net 如何从文件中读取图像
  7. MapPoint之旅(2)-----Getting Started with MapPoint Web Service(1)
  8. Ubuntu 16.04 LTS下编译GPU版tensorflow
  9. WCF的CommunicationObjectFaultedException异常问题
  10. Java基础之CopyOnWriteArrayList