android ViewStub简单介绍
ViewStub是一种非常灵活的视图,主要用于布局资源的实时加载. ViewStub 的继承类关系如下:
public final class ViewStubextends View
| java.lang.Object | ||
| ↳ | android.view.View | |
| ↳ | android.view.ViewStub | |
当设置ViewStub为可视的或者调用其inflate()方法时,布局资源被渲染,ViewStub的位置被渲染的布局资源替换。关于ViewStub的一个示例如下:
<ViewStub android:id="@+id/stub"
android:inflatedId="@+id/subTree"
android:layout="@layout/mySubTree"
android:layout_width="120dip"
android:layout_height="40dip" />
当布局资源被渲染后,ViewStub将被系统从其父控件中移除,这意味着其ID失效,其inflatedId将变为可用。渲染布局资源的方法如下:
ViewStub stub = (ViewStub) findViewById(R.id.stub);
View inflated = stub.inflate();
API的中文翻译:
一、结构
public final class ViewStub extends View
java.lang.Object
↳android.view.View
↳android.view.ViewStub
二、类概述
ViewStub 是一个隐藏的,不占用内存空间的视图对象,它可以在运行时延迟加载布局资源文件。当ViewStub可见,或者调用 inflate()函数时,才会加载这个布局资源文件。 该ViewStub在加载视图时在父容器中替换它本身。因此,ViewStub会一直存在于视图中,直到调用setVisibility(int) 或者inflate()为止。ViewStub的布局参数会随着加载的视图数一同被添加到ViewStub父容器。同样,你也可以通过使用
inflatedId属性来定义或重命名要加载的视图对象的Id值。例如:
android:inflatedId="@+id/subTree"
android:layout="@layout/mySubTree"
android:layout_width="120dip"
android:layout_height="400dip" />
通过"stub"id可以找到被定义的ViewStub对象。加载布局资源文件"mySubTree "后,ViewStub对象从其父容器中移除。可以通过id"subTree"找到由布局资源"mySubTree"创建的View。这个视图对象最后被指定为宽120dip,高40dip。执行加载布局资源文件的推荐方式如下:
View inflated = stub.inflate();
当inflate()被调用, 这个ViewStub被加载的视图替代并且返回这个视图对象。这使得应用程序不需要额外执行findViewById()来获取加载视图的引用。
(译者注:这个类大概意思是用ViewStub类和在XML文件里面指定的布局资源文件关联起来,让布局资源文件在需要使用的时候再加载上去。主要 作用是性能优化,什么时候用什么时候加载,不用在开始启动的时候一次加载,既可以加快程序的启动速度,又可以节省内存资源。)
三、嵌套类
接口 ViewStub.OnInflateListener 一个用于接收ViewStub已经成功加载布局资源文件的通知的监听器。
四、XML属性
| 属性名称 | 相关方法 | 描述 |
|---|---|---|
| android:inflatedId | setInflatedId(int) | 覆盖待加载视图的id值。 |
| android:layout | setLayoutResource(int) | 为待加载的资源视图提供一个标识,在ViewStub变为可见或获取焦点时使用它。(译者注:要引用的布局资源文件id) |
五、构造函数
ViewStub(Context context, int layoutResource)
创建一个与指定的布局资源文件关联的ViewStub对象。
参数 layoutResource 要加载的布局资源文件的id值。
六、公共方法
public void draw (Canvas canvas)
手动在指定的画布绘制这个视图(及所有其子视图)。这个视图必须在调用这个函数之前做好了整体布局。当要自己实现一个视图时,不要重载这个方法;相反,你应该重载onDraw(Canvas)方法。(译者注:主要用于自定义的视图组件的方法。)
参数 canvas 这个画布传到那个已渲染的视图对象。
public int getInflatedId ()
返回加载的布局资源文件的ID,如果加载的布局资源文件的id是NO_ID,那么这个加载的View将保留它原来的id值。
相关XML属性: android:inflatedId
返回值: 一个正整数来标识这个要加载的视图或者NO_ID将保持加载视图原来的id。
参见: setInflatedId(int)
public int getLayoutResource ()
返回加载的布局资源文件的id值。
相关XML属性: android:layout
返回值: 加载到视图对象的布局资源文件id值。
参见: setLayoutResource(int) setVisibility(int) inflate()
public View inflate ()
加载getLayoutResource()方法标识的布局资源,并通过加载布局资源替换父容器中它自己。
返回值: 这个已加载的布局资源文件.
public void setInflatedId (int inflatedId)
设置加载视图的ID。如果这个id为NO_ID,这个加载视图保持它原来的id不变。
相关XML属性: android:inflatedId
参数: inflatedId 一个正整数来标识这个加载视图或者NO_ID将保持加载视图原来的id。
参见: getInflatedId()
public void setLayoutResource (int layoutResource)
设置待加载的布局资源文件,当ViewStub被设置为visible或invisible或调用inflate()时使用。这个在加载布局资源文件时创建的视图用来在父容器中替换它自己。
相关XML属性: android:layout
参数: layoutResource 一个有效的布局资源文件id值(不等于0)。
参见: getLayoutResource() setVisibility(int) nflate()
public void setOnInflateListener (ViewStub.OnInflateListener inflateListener)
设置成功加载布局资源文件后事件通知的监听器。
相关XML属性: android:inflatedId
参数: inflateListener 该OnInflateListener在成功加载后得到事件通知。
参见: ViewStub.OnInflateListener
public void setVisibility (int visibility)
当可见性设置为VISIBLE或INVISIBLE,inflate()将被调用,并且加载视图资源在父容器中替换ViewStub。
参数: visibility 设置为VISIBLE(显示),INVISIBLE(隐藏), 或 GONE(完全隐藏,不暂用布局位置).
参见: inflate()
七、受保护方法
protected void dispatchDraw (Canvas canvas)
调用这个函数去绘制这个控件的子视图。可以通过派生类重写在绘制子类之前获取控制(但是是在他自己的视图已经被绘制完之后)
参数: canvas 这个画布传到那个已渲染的视图对象。
参见: inflate()
protected void onMeasure (int widthMeasureSpec, int heightMeasureSpec)
测量这个视图以确定其内容的高度和宽度。通过measure(int, int)来调用这个方法,并且应该由子类重写以提高内容测量的效率和精确度。
约定:当该方法被重写时,你必须调用setMeasuredDimension(int, int)来存储已测量视图的高度和宽度。否则将通过measure(int, int)抛出一个IllegalStateException异常。调用父类的onMeasure(int, int)方法是一个有效的办法。
父类的实现是以背景大小为默认大小,除非MeasureSpec(测量细则)允许更大的背景。为了更好测量内容子类应该重写onMeasure(int, int)。
如果这个方法被重写,子类有责任确保测量它的高度和宽度至少是视图的最小宽度和高度(getSuggestedMinimumHeight()和getSuggestedMinimumWidth())。
参数: widthMeasureSpec 由于父类有横向空间要求,参见View.MeasureSpec。heightMeasureSpec 由于父类有纵向空间要求,参见View.MeasureSpec
android ViewStub简单介绍的更多相关文章
- Android发展简单介绍
Android一词的本义指“机器人”,同一时候也是Google于2007年11月5日宣布的基于Linux平台的开源手机操作系统的名称,该平台由操作系统.中间件.用户界面和应用软件组成,号称是首个为移动 ...
- Android NDK 简单介绍、工具安装、环境配置
NDK全称:Native Development Kit. 1.NDK是一系列工具的集合. * NDK提供了一系列的工具,帮助开发人员高速开发C(或C++)的动态库,并能自己主动将so和java应用一 ...
- 值得推荐的android开发框架简单介绍
一些总结出来的Android高速开发框架,所有都是开源框架,附带项目地址,是开发学习的绝佳资料. Direct-Load-apk项目 项目主页地址:http://www.kymjs.com/ 功能:D ...
- Android Studio 简单介绍和使用问题小结
原文 http://www.cnphp6.com/archives/59264 主题 Gradle Android Studio Android 随着android 5.0 的发布,android ...
- Android URI简单介绍
就Android平台而言,URI主要分三个部分:scheme, authority and path.当中authority又分为host和port.格式例如以下: scheme://host:por ...
- Android开发自学笔记(Android Studio)—4.界面编程与View组件简单介绍
一.引言 Android应用开发最重要的一份内容就是界面的开发,无论你程序包含的内容多么优秀,如若没有一个良好的用户交互界面,最终也只是会被用户所遗弃.Android SDK提供了大量功能丰富的UI组 ...
- Android项目开发全程(二)--Afinal用法简单介绍
本篇博文接上篇的<Android项目开发全程(一)--创建工程>,主要介绍一下在本项目中用到的一个很重要的框架-Afinal,由于本系列博文重点是项目开发全程,所以在这里就先介绍一下本项目 ...
- 使用Kotlin开发Android应用(I):简单介绍
使用Kotlin开发Android应用(I):简单介绍 @author ASCE1885的 Github 简书 微博 CSDN 原文链接 Kotlin是一门基于JVM的编程语言.它正成长为Androi ...
- Android ImageLoader(Android-Universal-Image-Loader)【1】概述及使用简单介绍
Android ImageLoader(Android-Universal-Image-Loader)[1]概述及使用简单介绍 一,前言:为什么要引入Android-Universal-Imag ...
随机推荐
- snappy
Snappy 是一个 C++ 的用来压缩和解压缩的开发包.其目标不是最大限度压缩或者兼容其他压缩格式,而是旨在提供高速压缩速度和合理的压缩率.Snappy 比 zlib 更快,但文件相对要大 % 到 ...
- 课程存储校对:程序设计思想、源程序代码、运行结果截图,以及开发过程中的项目计划日志、时间记录日志、缺陷记录日志(PSP0级记录)。
1.程序设计思想 ⑴将JDBC驱动jar包导入到WEB-INF的lib文件夹下 ⑵建立数据库,在数据库中建表,分别将课程名称.任课教师及上课地点录入到列中 ⑶首先写出加载驱动.关闭资源的工具类和异常处 ...
- spring aop学习记录
许多AOP框架,比较常用的是Spring AOP 与AspectJ.这里主要学习的Spring AOP. 关于AOP 日志.事务.安全验证这些通用的.散步在系统各处的需要在实现业务逻辑时关注的事情称为 ...
- Vue 鼠标移入移出事件
Vue 中鼠标移入移出事件 @mouseover和@mouseleave 然后绑定style 现在开始代码示例 <template> <div class="pc&qu ...
- Chrome---谷歌浏览器修改用户缓存文件夹 如何设置缓存路径
1.首先我们在电脑上打开chrome浏览器,然后地址栏输入chrome://Version,然后按下回车键,找到个人资料路径一项. 2.接下来我们选中个人资料路径后面所有的信息,右键点击信息后选择“复 ...
- css & clearfix & clear-fixed
css & clearfix & clear-fixed https://zzk.cnblogs.com/my/s/blogpost-p?Keywords=clearfix .grou ...
- 如何快速定位到DBGrid的某一行!!!急...
比如我查找张三,那么DBGrid就可以定位到张三那行并选中这行,除了用循环实现还有没有快速定位的方法,谢谢! 解决方案 » to SuperTitan001 那如何找到张三的这行呢?除了用循环还有什么 ...
- 为什么int型最大的数是2147483647
32位的电脑中,用二进制表示,最大的就是32个1,用十进制表示为2^32-1,大概40多亿(4294967295) 对于有符号的,第一位用作表示正负(0,1),最大的就是31个1,用十进制表示为2^3 ...
- Python——Label控件说明
Anchor : 标签中文本的位置: background(bg)foreground(fg) :背景色:前景色: borderwidth(bd) :边框宽度: width .height ...
- Python——线程1
多线程并发 from threading import Thread import time #多线程并发 def func(n): time.sleep(1) print(n) for i in r ...