文档章节

Android中ViewStub控件分析及使用

丁佳辉
 丁佳辉
发布于 2016/07/01 16:02
字数 549
阅读 63
收藏 0

在分析Android6.0源码时碰到以下一个布局 [java] view plain copy 在CODE上查看代码片派生到我的代码片 <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的用法,源码上已有介绍 [java] view plain copy 在CODE上查看代码片派生到我的代码片 <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 [java] view plain copy 在CODE上查看代码片派生到我的代码片 ViewStub stub = (ViewStub) findViewById(R.id.stub);
View inflated = stub.inflate();

© 著作权归作者所有

丁佳辉
粉丝 20
博文 453
码字总数 206507
作品 0
浦东
程序员
私信 提问
布局与控件(五)-Toast吐司与布局的抽象标签merge include ViewStub

版权声明:本文为博主原创文章,禁止转载,违者必究。 https://blog.csdn.net/anddlecn/article/details/51566643 第5节 Toast 5.1 使用效果 用来向用户弹出一个提示框,然后自动消失,就像这...

anddlecn
2016/06/02
0
0
布局技巧:使用 ViewStub

多亏了标签,在Android里,很容易就能做到共享和重用UI组件。在Android开发中,很容易就能创建出复杂的UI结构,结果呢,用了很多的View,且其中的一些很少使用。针对这种情况,谢天谢地,And...

鉴客
2011/09/26
718
0
Android 性能优化之减少UI过度绘制

什么是过度绘制(OverDraw) 在多层次重叠的UI结构里面,如果不可见的UI也在做绘制的操作,会导致某些像素区域被绘制了多次。这样就会浪费大量的CPU以及GPU资源。过度绘制最直观的影响就是会...

记录自己的点点滴滴
2018/07/20
0
0
android ViewStub使用

Android 2.0以后的系统提供了ViewStub控件,在合适的情况使用此控件,能加快程序启动速度,节省内存资源,具体使用参考以下文章: http://blog.csdn.net/hitlion2008/article/details/673753...

TinkerS
2012/08/02
123
0
Android viewStub应用

1.viewstub是一个轻量级的 view,他是一个看不见的,不占布局位置,占用资源很小的控件。 可以为viewstub指定一个布局,在inflate布局的时候,只有viewstub会被初始化。然后当viewstub被设置为...

amigos_wu
2012/06/06
889
0

没有更多内容

加载失败,请刷新页面

加载更多

Java注解合并,注解继承

spring中有时候一个类上面标记很多注解。 实际上Java注解可以进行继承(也就是把多个注解合并成1个) 比如说SpringMVC的注解 @RestController@RequestMapping("/person") 可以合并为一个 @P...

物种起源-达尔文
18分钟前
4
0
撤消Git中一个文件的工作副本修改?

在最后一次提交之后,我修改了工作副本中的一堆文件,但是我想撤消对这些文件之一的更改,例如将其重置为与最新提交相同的状态。 但是,我只想撤消仅一个文件的工作副本更改,而没有其他操作...

技术盛宴
53分钟前
4
0
Qt编写气体安全管理系统28-模拟工具

一、前言 模拟工具在一些涉及到硬件通信的程序中特别有用,也特别需要,回顾这十年来做过的项目,95%的项目都是软硬件交互的,貌似软硬件结合的项目更有生命力一些,纯软件的或者纯硬件的,并...

飞扬青云
今天
4
0
关于生活方式

生活就是生活,但难免和工作混在一起,所以要建立自己的生活方式,把工作稍微隔开点。 首先呢,每周放假的两天肯定会: 洗衣服,收拾屋子,列计划是必须要做的事情。 (这里可能还包含一些处...

T型人才追梦者
今天
6
0
JVM

一、JVM一些基本概念 1、JVM和普通虚拟机 JVM:Java Virtual Machine,程序自己独立的运行环境;堆栈、寄存器、字节码指令;可以运行多种语言:Java、Scala、Grovvy; 普通虚拟机:能完整提供...

请把小熊还给我_m
今天
4
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部