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。
相关推荐
在Android开发中,ViewStub是一个轻量级的组件,它在初始加载时占用的资源非常少,主要用于延迟加载和动态插入布局。ViewStub在XML布局文件中定义,但默认情况下它是不可见的,不会占据任何空间,直到被显式地设置为...
ViewStub是一个轻量级的视图,它在默认情况下不可见,只有在被inflate或者设置布局资源后才会加载并显示。在DataBinding中结合使用ViewStub,可以实现更灵活的视图管理。 **DataBinding库的介绍** DataBinding库...
在Android开发中,ViewStub是一个轻量级的控件,常用于实现动态加载和延迟加载。这个控件在默认情况下不占用布局空间,且不可见。只有当被 inflated(加载)时,它才会占据布局中的位置,并显示其中的视图。这种特性...
而ViewStub则是一个轻量级的视图,它在布局加载时是不可见的,并且不占用任何空间。当ViewStub被设置为可见或者调用inflate方法时,它会加载其关联的布局资源并成为布局的一部分。在ListView中巧妙地使用ViewStub,...
在Android开发中,`ViewStub` 是一个非常实用但经常被忽视的组件。它是一个轻量级的视图,主要用于延迟加载和初始化视图。在本文中,我们将深入理解`ViewStub`的工作原理,以及如何在实际项目中使用它。 **一、...
在Android开发中,ViewStub是一个轻量级的组件,它在初始加载时并不可见,不占用任何空间,常用于延迟加载布局或者实现布局复用。这个简单的示例旨在教你如何在项目中有效地利用ViewStub。 首先,了解ViewStub的...
ViewStub viewStub = (ViewStub) findViewById(R.id.viewStub); viewStub.inflate(); ``` 3. **操作**:加载后的布局成为正常的视图,可以像其他视图一样进行操作,例如找到其中的控件并设置监听器。 ```java View...
ViewStub在Android开发中是一个非常实用的轻量级组件,常用于延迟加载或者动态加载一些不常用但必不可少的UI元素。这个组件默认是不可见的,并且占据的布局空间几乎可以忽略不计,直到被激活时才会加载并显示在界面...
ViewStub是Android开发中一种特殊的轻量级控件,它在布局文件中占用的空间为0,不会参与初始化时的视图构建,直到被显式地`inflate`或设置了`android:layout_width`和`android:layout_height`属性后才会被加载。...
在Android开发中,ViewStub是一个轻量级的组件,它在布局文件中占用的空间为0,不会参与初始化时的视图加载。ViewStub通常用于延迟加载或者动态插入视图,尤其适用于实现页面状态的动态切换,如空状态、错误状态、...
在Android开发中,ViewStub是一个轻量级的组件,它允许开发者延迟加载和初始化布局。ViewStub不占用屏幕空间,直到被显式地设置为可见或者调用`inflate()`方法时,才会加载指定的布局并将其插入到父视图中。这种特性...
ViewStub是一个轻量级的View,通常用于延迟加载布局,它在XML布局文件中占据几乎为0的内存空间,直到被 inflated 才会被实例化并加载对应的布局。在本例中,我们将探讨如何利用ViewStub实现Tab选项卡效果。 首先,...
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开发中,动态添加控件和使用ViewStub是两种非常实用的技术,它们极大地提高了界面的灵活性和可扩展性。动态添加控件允许开发者在运行时根据需要创建和添加组件,而ViewStub则是一种轻量级的视图,用于延迟...
在Android开发中,ViewStub是一个轻量级的组件,它默认不可见且占用的空间极小。这个组件的主要作用是延迟加载布局,直到被 inflation(渲染)或者触发某个事件时才会加载进来。在本主题“巧妙运用ViewStub写出类似...
### Android中的ViewStub详解 #### 一、概述 在Android开发过程中,为了提高应用的性能和用户体验,开发者经常需要对应用程序进行各种优化处理。其中,`ViewStub`作为Android框架提供的一个工具类,可以帮助开发者...
"ViewStub_Tab.rar_Tabú_android tab"这个资源包显然提供了一个利用ViewStub实现Tab功能的示例。ViewStub是Android SDK中一个轻量级的视图组件,通常用于延迟加载和隐藏视图,它占用极小的内存和布局空间。在这里,...
ViewStub viewStub = findViewById(R.id.view_stub); View inflatedView = viewStub.inflate(); inflatedView.setVisibility(View.VISIBLE); ``` 通过这种方式,只有当需要时才加载`b.xml`中的布局,这不仅减少...
`UI_include_merge_ViewStub` 这个主题主要涉及到了三个关键概念:`<include>`标签、`<merge>`标签和`ViewStub`组件。这些元素在构建高效且可维护的布局文件时起着重要作用。 首先,我们来详细了解一下`<include>`...
ViewStub是Android布局优化中一个很不错的标签/控件,直接继承自View。虽然Android开发人员基本上都听说过,但是真正用的可能不多。 ViewStub可以理解成一个非常轻量级的View,与其他的控件一样,有着自己的属性及...