在开发过程中,有时候,需要这样一种控件,正常情况下不可见,不占用任何布局空间,只在某种特定情况下显示,这种情况下,我们使用一个普通的View,利用设置setVisibility(View.GONE)自然也可以实现,但是这样的话即使我们不需要显示View,Android也会将这个View渲染出来,只不过不显示而已。如果我们不仅仅需要一个控件,而是一个layout呢?那么是不是Android将做更多的无用功呢?而ViewStub很好的避免了这个问题,默认情况下ViewStub是不显示的,不占用父控件任何空间,当设置成显示,或者调用inflate时,ViewStub将会被我们预先写好的布局文件替换。

用代码简单示例:

<ViewStub android:id="@+id/stub"
android:inflatedId="@+id/subTree"
android:layout="@layout/mySubTree"
android:layout_width="120dip"
android:layout_height="40dip" />

这是xml部分,就像一个普通控件放在你想放置的位置,而android:layout是设置当你调用inflate()或者setVisibility时替换这个ViewStub显示出来的layout,这个可以写在另一个文件里,默认情况是不渲染的

ViewStub stub = (ViewStub) findViewById(R.id.stub);
View inflated = stub.inflate();

当你第一次需要显示你要的内容时,才需要渲染他,调用inflate(),此时,你的ViewStub将从布局层级中消失,而取代他的是之前定义好的layout。因此,你不需要保持ViewStub的引用,因为那没有意义,同时ViewStub只能inflate一次。如果你之后想隐藏或再次显示,那么调用你的layout的setVisibility。

最新文章

  1. linux enc28j60网卡驱动移植(硬件spi和模拟spi)
  2. 你真的会用AsyncTask吗?(一)
  3. Codeforces 424 B Megacity【贪心】
  4. 【hbase】使用thrift with python 访问HBase
  5. Win系统下制作U盘CLOVER引导+安装原版Mavericks10.9
  6. cors技术
  7. 机器学习实战kNN之手写识别
  8. TP5学习基础一:增删改查小demo
  9. 总结&#183;CSS3中定位模型之position属性的使用方法
  10. jquery.jconfirm兼容IE6
  11. Andrid 高级程序员面试题
  12. Can&#39;t update: no tracked branch No tracked branch configured for branch dev.
  13. Druid VS Antlr4
  14. P1119 灾后重建 floyd
  15. 在Fastreport里使用的CRC函数
  16. asp.net中 使用参数化mysqlparameter 保存数据时,总保存成一个汉字的解决方案。
  17. jQuery插件实例七:一棵Tree的生成史
  18. EntityFramework:值语义的实体如何修改?
  19. MySQL备份还原之三使用xtrabackup
  20. oracle 基础知识(三)

热门文章

  1. Windows7下移植Qt4.8.4项目到QT5.2上时遇到的一些问题
  2. Zookeeper安装配置及简单使用
  3. 在不打开excel的情况下用python执行excel
  4. Neo4J空间数据存储
  5. 【Neo4j查询优化系列】如何快速统计节点的关系数
  6. ArcGis基础——设置图层可选状态
  7. 一、hibernate环境搭建
  8. list采坑记录一下
  9. Linux 任务管理器(二)
  10. vue撸的demo