返回介绍

ViewStub

发布于 2025-03-09 17:00:23 字数 4581 浏览 0 评论 0 收藏 0

ViewStub

版本:Android 2.2 r1

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:inflatedIdsetInflatedId(int)覆盖待加载视图的 id 值。
android:layoutsetLayoutResource(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。

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文