public final class ViewStub extends View
类摘要:
ViewStub 是一个隐藏的,不占用内存空间的视图对象,它可以在运行时延迟加载布局资源文件。当 ViewStub 可见,或者调用 inflate()函数时,才会加载这个布局资源文件。该
ViewStub 在加载视图时在父容器中替换它本身。因此,ViewStub 会一直存在于视图中,直到调用 setVisibility(int) 或者 inflate()为止。ViewStub 的布局参数会随着加载的视图
数一同被添加到 ViewStub 父容器。
同样,你也可以通过使用 inflatedId 属性来定义或重命名要加载的视图对象的 Id 值。
例如:
<ViewStub
android:id="@+id/stub"
android:layout_width="100dp"
android:layout_height="100dp"
android:inflatedId="@+id/subTree"
android:layout="@layout/mySubTree" />
通过"stud"id 可以找到被定义的 ViewStub 对象。加载布局资源文件"mySubTree "后,ViewStub 对象从其父容器中移除。可以通过 id"subTree"找到由布局资源"mySubTree"创建的View。这个视图对象最后被指定为宽 100dip,高 100dip。执行加载布局资源文件的推荐方式
如下:
ViewStub stub = findViewById(R.id.stub);
View inflated = stub.inflate();
当 inflate()被调用, 这个 ViewStub 被加载的视图替代并且返回这个视图对象。这使得应用程序不需要额外执行 findViewById()来获取加载视图的引用。
这个类大概意思是用 ViewStub 类和在 XML 文件里面指定的布局资源文件关联起来,让布局资源文件在需要使用的时候再加载上去。主要作用是性能优化,什么时候用什么时候加载,不用在开始启动的时候一次加载,既可以加快程序的启动速度,又可以节省内存资源
嵌套类
接口ViewStub.OnInflateListener
一个用于接收 ViewStub 已经成功加载布局资源文件的通知的监听器。
XML 属性
属性名称
相关方法
描述
android:inflatedId |
setInflatedId(int) |
覆盖待加载视图的 id 值。 |
android:layout |
setLayoutResource(int) |
要引用的布局资源文件 id |
构造函数
ViewStub(Context context, int layoutResource)
创建一个与指定的布局资源文件关联的 ViewStub 对象。
参数layoutResource 要加载的布局资源文件的 id 值。
公共方法
public void draw (Canvas canvas)
参数canvas 这个画布传到那个已渲染的视图对象。
手动在指定的画布绘制这个视图(及所有其子视图)。这个视图必须在调用这个函数之前做好了整体布局。
当要自己实现一个视图时,不要重载这个方法;相反,你应该重载onDraw(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)
参数inflatedId: 一个正整数来标识这个加载视图或者 NO_ID 将保持加载视图原来的 id。
设置加载视图的 ID。如果这个 id 为 NO_ID,这个加载视图保持它原来的 id 不变。
相关 XML 属性:android:inflatedId
参见getInflatedId()
public void setLayoutResource (int layoutResource)
参数layoutResource: 一个有效的布局资源文件 id 值(不等于 0)。
设置待加载的布局资源文件,当 ViewStub 被设置为 visible 或 invisible 或调用 inflate()时使用。这个在加载布局资源文件时创建的视图用来
在父容器中替换它自己。
相关 XML 属性:android:layout
参见
- getLayoutResource()
- setVisibility(int)
- inflate()
public void setOnInflateListener (ViewStub.OnInflateListener inflateListener)
参数inflateListener: 该 OnInflateListener 在成功加载后得到事件通知。
设置成功加载布局资源文件后事件通知的监听器。
参见ViewStub.OnInflateListener
public void setVisibility (int visibility)
参数visibility 设置为 VISIBLE(显示), INVISIBLE(隐藏), 或 GONE(完全隐藏,不暂用布局位置)
当可见性设置为 VISIBLE 或 INVISIBLE,inflate()将被调用,并且加载视图资源在父容器中
替换 ViewStub。
参见inflate()
受保护方法
protected void dispatchDraw (Canvas canvas)
调用这个函数去绘制这个控件的子视图。可以通过派生类重写在绘制子类之前获取控制(但是是在他自己的视图已经被绘制完之后)
参数canvas 这个画布传到那个已渲染的视图对象。
protected void onMeasure (int widthMeasureSpec, int heightMeasureSpec)
参数
- widthMeasureSpec 由于父类有横向空间要求,参见 View.MeasureSpec。
- heightMeasureSpec 由于父类有纵向空间要求,参见 View.MeasureSpec。
测量这个视图以确定其内容的高度和宽度。通过 measure(int, int)来调用这个方法,并且应该由子类重写以提高内容测量的效率和精确度。
约定:当该方法被重写时,你必须调用 setMeasuredDimension(int, int)来存储已测量视图的高度和宽度。否则将通过 measure(int, int)抛出一个 IllegalStateException 异常
调用父类的 onMeasure(int, int)方法是一个有效的办法。父类的实现是以背景大小为默认大小,除非 MeasureSpec(测量细则)允许更大的背景。 为了更好测量内容子类应该重写 onMeasure(int, int)。
如果这个方法被重写,子类有责任确保测量它的高度和宽度至少是视图的最小宽度和高度(getSuggestedMinimumHeight()和 getSuggestedMinimumWidth())。
分享到:
相关推荐
Android下使用ViewStub控件动态懒加载。可以参见博客:http://www.cnblogs.com/plokmju/p/android_ViewStub.html
android 用ViewStub实现Tab选项卡效果
Android 使用ViewStub 实现Activity 页面不同状态动态切换。可以直接继承使用,也可以根据自己的需求进行优化。。
第三章 Android开发 使用ViewStub延迟展开视图.docx
ViewStub是Android布局优化中一个很不错的标签/控件,直接继承自View。虽然Android开发人员基本上都听说过,但是真正用的可能不多。 ViewStub可以理解成一个非常轻量级的View,与其他的控件一样,有着自己的属性及...
DataBinding中ViewStub例子
Android UI优化之merge标签的使用,主要介绍ViewStub方法使用的注意事项及方法实现。
这是一个关于Android Layout布局复用的简单示例。
利用ViewStub显示和隐藏布局 运用View.VISIBLE和View.GONE去改变布局的可见性.
Android开发:巧妙运用ViewStub写出类似Tab选项卡。
主要为大家详细介绍了Android组件ViewStub基本使用方法,感兴趣的小伙伴们可以参考一下
在Android开发中,View是我们必须要接触的用来展示的技术.通常情况下随着View视图的越来越复杂,整体布局的性能也会随之下降.这里介绍一个在某些场景下提升布局性能的View,它就是ViewStub. ViewStub是什么 ViewStub是...
在开发应用程序的时候,经常会遇到这样的情况,会在运行时动态根据条件来决定显示哪个View或某个布局。那么最通常的想法就是把可能... 推荐的做法是使用android.view.ViewStub,ViewStub是一个轻量级的View,它一个看
主要为大家详细介绍了Android布局技巧之使用ViewStub,具有一定的实用性,感兴趣的小伙伴们可以参考一下
惰性控件ViewStub实现布局东动态加载,在手机页面点击展开按钮,在按钮下方会出现一个页面。常用在查看商品的详细信息。
在开发应用程序的时候,经常会遇到这样的情况,会在运行时动态根据条件来决定显示哪个View或某个布局。那么最通常的想法就是把...推荐的做法是使用android.view.ViewStub,ViewStub是一个轻量级的View,它一个看不见的
在布局优化中,Androi的官方提到了这三种布局、、<ViewStub>,并介绍了这三种布局各有的优势,下面也是简单说一下他们的优势,以及怎么使用,记下来权当做笔记。 1、布局重用 标签能够重用布局文件,简单的使用...
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 ...