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值。例如:
通过"stud"id可以找到被定义的ViewStub对象。加载布局资源文件"mySubTree "后, ViewStub对象从其父容器中移除。可以通过id"subTree"找到由布局资源"mySubTree"创建的View。这个视图对象最后被指定为宽120dip,高40dip。执行加载布局资源文件的推荐方式如下:
当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)
inflate()
public void setOnInflateListener (ViewStub.OnInflateListener inflateListener)
设置成功加载布局资源文件后事件通知的监听器。
参数
inflateListener 该OnInflateListener在成功加载后得到事件通知。
参见
ViewStub.OnInflateListener
public void setVisibility (int visibility)
当可见性设置为VISIBLE或INVISIBLE,inflate()将被调用,并且加载视图资源在父容器中替换ViewStub。
参数
visibility 设置为VISIBLE(显示), INVISIBLE(隐藏), 或 GONE(完全隐藏,不暂用布局位置).
参见
inflate()
受保护方法
protected void dispatchDraw (Canvas canvas)
调用这个函数去绘制这个控件的子视图。可以通过派生类重写在绘制子类之前获取控制(但是是在他自己的视图已经被绘制完之后)
参数
canvas 这个画布传到那个已渲染的视图对象。
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。
相关推荐
利用ViewStub显示和隐藏布局 运用View.VISIBLE和View.GONE去改变布局的可见性.
DataBinding中ViewStub例子
初次学习使用viewStub,做个简单viewstub小例子。
ListView之ViewStub的使用
Android下使用ViewStub控件动态懒加载。可以参见博客:http://www.cnblogs.com/plokmju/p/android_ViewStub.html
Android UI优化之merge标签的使用,主要介绍ViewStub方法使用的注意事项及方法实现。
Android 使用ViewStub 实现Activity 页面不同状态动态切换。可以直接继承使用,也可以根据自己的需求进行优化。。
惰性控件ViewStub实现布局东动态加载,在手机页面点击展开按钮,在按钮下方会出现一个页面。常用在查看商品的详细信息。
android 用ViewStub实现Tab选项卡效果
第三章 Android开发 使用ViewStub延迟展开视图.docx
But the ViewStub is an invisible and zero-sized view that can be used to lazy loading on demand. Similarly, with reduce memory usage, use ViewStub can also speed up rendering by loading the views ...
这是一个关于Android Layout布局复用的简单示例。
NULL 博文链接:https://edison-cool911.iteye.com/blog/940103
ViewStub是Android布局优化中一个很不错的标签/控件,直接继承自View。虽然Android开发人员基本上都听说过,但是真正用的可能不多。 ViewStub可以理解成一个非常轻量级的View,与其他的控件一样,有着自己的属性及...
针对这种情况,谢天谢地,Android还为我们提供了一个特别的构件——ViewStub,它可以使你充分享受的好处而不会造成无用View的浪费。 ViewStub是一个看不见的,轻量级的View。它没有尺寸,也不会绘制以及以某种形式...
弹性ListView控件的实现 和 ViewStub 控件的应用
这里介绍一个在某些场景下提升布局性能的View,它就是ViewStub. ViewStub是什么 ViewStub是View的子类 它不可见,大小为0 用来延迟加载布局资源 注,关于Stub的解释 A stub is a small program routine that ...
本文档福利发放... 里面是android代码,实现的是动态添加控件和viewstub使用的例子。东西比较简单,仅适合初学者。
巧妙运用ViewStub写出类似Tab选项卡(想怎么写tab就怎么写,横着写竖着写随你)
在开发应用程序的时候,经常会遇到这样的情况,会在运行时动态根据条件来决定显示哪个View或某个布局。那么最通常的想法就是把可能... 推荐的做法是使用android.view.ViewStub,ViewStub是一个轻量级的View,它一个看