轻量级的惰性控件——ViewStub
2024-10-07 19:51:01
在开发过程中,有时候,需要这样一种控件,正常情况下不可见,不占用任何布局空间,只在某种特定情况下显示,这种情况下,我们使用一个普通的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。
最新文章
- linux enc28j60网卡驱动移植(硬件spi和模拟spi)
- 你真的会用AsyncTask吗?(一)
- Codeforces 424 B Megacity【贪心】
- 【hbase】使用thrift with python 访问HBase
- Win系统下制作U盘CLOVER引导+安装原版Mavericks10.9
- cors技术
- 机器学习实战kNN之手写识别
- TP5学习基础一:增删改查小demo
- 总结&#183;CSS3中定位模型之position属性的使用方法
- jquery.jconfirm兼容IE6
- Andrid 高级程序员面试题
- Can&#39;t update: no tracked branch No tracked branch configured for branch dev.
- Druid VS Antlr4
- P1119 灾后重建 floyd
- 在Fastreport里使用的CRC函数
- asp.net中 使用参数化mysqlparameter 保存数据时,总保存成一个汉字的解决方案。
- jQuery插件实例七:一棵Tree的生成史
- EntityFramework:值语义的实体如何修改?
- MySQL备份还原之三使用xtrabackup
- oracle 基础知识(三)