前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Android中ViewStub控件分析及使用

Android中ViewStub控件分析及使用

作者头像
fanfan
发布2018-01-24 18:12:58
6320
发布2018-01-24 18:12:58
举报
文章被收录于专栏:编程思想之路编程思想之路

在分析Android6.0源码时碰到以下一个布局

代码语言:javascript
复制
<merge xmlns:android="http://schemas.android.com/apk/res/android">
    <ListView
        android:id="@+id/list"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"/>
    <ViewStub
        android:id="@+id/empty"
        android:layout="@layout/no_transfers"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"/>
</merge>

在布局中用到了一个叫做ViewStub的view,不甚理解,

我一直认为分析一个原生控件的最好办法就是查看源码以及demo演示,所以先看下ViewStub源码中的说明

根据源码可以获得以下信息

1,ViewStub继承自View

2,ViewStub默认是不可见(invisible)的,而且View的size为zero,即大小为0的view,用来在运行期间(runtime)加载布局

3,当一个ViewStub被设置成可见visible或者调用inflate()方法时,ViewStub得到填充,此时viewstub所引用的layout布局会代替掉viewstub控件显示出来,也就是说在调用setVisible(int)或者inflate()方法之前,UI中只有一个大小为0的viewstub。这对于布局的动态加载很有帮助

以上三点主要是总结来说就是viewstub默认不可见,在对布局进行加载时viewstub大小为0不占用任何的空间,当开发者在运行期间想让其动态显示时可以调用inflate()方法或者setVisible(int)来动态的加载布局,看到这里不得不佩服源码之强大,自己之不足。

关于ViewStub的用法,源码上已有介绍

代码语言:javascript
复制
     <ViewStub android:id="@+id/stub"
               android:inflatedId="@+id/subTree"
               android:layout="@layout/mySubTree"
               android:layout_width="120dip"
               android:layout_height="40dip" />

其用法其实类似include,其中android:layout属性用来引用所要动态加载的布局,通过id可以对ViewStub在代码中进行引用

在代码中通过id获取到对ViewStub的引用,然后调用inflate方法,调用该方法后mySubTree布局会代替ViewStub。ViewStub会被从它的parent中移除.通过inflateID:subTree可以在代码中引用到mySubTree

代码语言:javascript
复制
    ViewStub stub = (ViewStub) findViewById(R.id.stub);
     View inflated = stub.inflate();
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2016-07-01 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档