`
孙国威
  • 浏览: 11740 次
  • 性别: Icon_minigender_1
  • 来自: 北京
最近访客 更多访客>>
文章分类
社区版块
存档分类
最新评论

ViewStub

 
阅读更多

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利用ViewStub显示和隐藏布局

    在Android开发中,ViewStub是一个轻量级的组件,它在初始加载时占用的资源非常少,主要用于延迟加载和动态插入布局。ViewStub在XML布局文件中定义,但默认情况下它是不可见的,不会占据任何空间,直到被显式地设置为...

    DataBinding中ViewStub例子

    ViewStub是一个轻量级的视图,它在默认情况下不可见,只有在被inflate或者设置布局资源后才会加载并显示。在DataBinding中结合使用ViewStub,可以实现更灵活的视图管理。 **DataBinding库的介绍** DataBinding库...

    Android下使用ViewStub控件加载

    在Android开发中,ViewStub是一个轻量级的控件,常用于实现动态加载和延迟加载。这个控件在默认情况下不占用布局空间,且不可见。只有当被 inflated(加载)时,它才会占据布局中的位置,并显示其中的视图。这种特性...

    ListView之ViewStub的使用

    而ViewStub则是一个轻量级的视图,它在布局加载时是不可见的,并且不占用任何空间。当ViewStub被设置为可见或者调用inflate方法时,它会加载其关联的布局资源并成为布局的一部分。在ListView中巧妙地使用ViewStub,...

    ViewStub的简单Demo

    在Android开发中,`ViewStub` 是一个非常实用但经常被忽视的组件。它是一个轻量级的视图,主要用于延迟加载和初始化视图。在本文中,我们将深入理解`ViewStub`的工作原理,以及如何在实际项目中使用它。 **一、...

    ViewStub的使用简单示例

    在Android开发中,ViewStub是一个轻量级的组件,它在初始加载时并不可见,不占用任何空间,常用于延迟加载布局或者实现布局复用。这个简单的示例旨在教你如何在项目中有效地利用ViewStub。 首先,了解ViewStub的...

    Android UI优化之ViewStub标签的使用

    ViewStub viewStub = (ViewStub) findViewById(R.id.viewStub); viewStub.inflate(); ``` 3. **操作**:加载后的布局成为正常的视图,可以像其他视图一样进行操作,例如找到其中的控件并设置监听器。 ```java View...

    ViewStub的简单使用

    ViewStub在Android开发中是一个非常实用的轻量级组件,常用于延迟加载或者动态加载一些不常用但必不可少的UI元素。这个组件默认是不可见的,并且占据的布局空间几乎可以忽略不计,直到被激活时才会加载并显示在界面...

    惰性控件ViewStub实现布局东动态加载

    ViewStub是Android开发中一种特殊的轻量级控件,它在布局文件中占用的空间为0,不会参与初始化时的视图构建,直到被显式地`inflate`或设置了`android:layout_width`和`android:layout_height`属性后才会被加载。...

    Android ViewStub 页面状态动态切换

    在Android开发中,ViewStub是一个轻量级的组件,它在布局文件中占用的空间为0,不会参与初始化时的视图加载。ViewStub通常用于延迟加载或者动态插入视图,尤其适用于实现页面状态的动态切换,如空状态、错误状态、...

    第三章 Android开发 使用ViewStub延迟展开视图.docx

    在Android开发中,ViewStub是一个轻量级的组件,它允许开发者延迟加载和初始化布局。ViewStub不占用屏幕空间,直到被显式地设置为可见或者调用`inflate()`方法时,才会加载指定的布局并将其插入到父视图中。这种特性...

    android 用ViewStub实现Tab选项卡效果

    ViewStub是一个轻量级的View,通常用于延迟加载布局,它在XML布局文件中占据几乎为0的内存空间,直到被 inflated 才会被实例化并加载对应的布局。在本例中,我们将探讨如何利用ViewStub实现Tab选项卡效果。 首先,...

    Android代码-RxJava封装的ViewStub。使用方式与RxBinding相似。

    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 ...

    动态添加控件和ViewStub的使用例子

    在Android开发中,动态添加控件和使用ViewStub是两种非常实用的技术,它们极大地提高了界面的灵活性和可扩展性。动态添加控件允许开发者在运行时根据需要创建和添加组件,而ViewStub则是一种轻量级的视图,用于延迟...

    巧妙运用ViewStub写出类似Tab选项卡

    在Android开发中,ViewStub是一个轻量级的组件,它默认不可见且占用的空间极小。这个组件的主要作用是延迟加载布局,直到被 inflation(渲染)或者触发某个事件时才会加载进来。在本主题“巧妙运用ViewStub写出类似...

    Android 中文 API(14) —— ViewStub

    ### Android中的ViewStub详解 #### 一、概述 在Android开发过程中,为了提高应用的性能和用户体验,开发者经常需要对应用程序进行各种优化处理。其中,`ViewStub`作为Android框架提供的一个工具类,可以帮助开发者...

    ViewStub_Tab.rar_Tabú_android tab

    "ViewStub_Tab.rar_Tabú_android tab"这个资源包显然提供了一个利用ViewStub实现Tab功能的示例。ViewStub是Android SDK中一个轻量级的视图组件,通常用于延迟加载和隐藏视图,它占用极小的内存和布局空间。在这里,...

    弹性ListView控件的实现 和 ViewStub 控件的应用

    ViewStub viewStub = findViewById(R.id.view_stub); View inflatedView = viewStub.inflate(); inflatedView.setVisibility(View.VISIBLE); ``` 通过这种方式,只有当需要时才加载`b.xml`中的布局,这不仅减少...

    UI_include_merge_ViewStub

    `UI_include_merge_ViewStub` 这个主题主要涉及到了三个关键概念:`<include>`标签、`<merge>`标签和`ViewStub`组件。这些元素在构建高效且可维护的布局文件时起着重要作用。 首先,我们来详细了解一下`<include>`...

    Android布局优化之ViewStub控件

    ViewStub是Android布局优化中一个很不错的标签/控件,直接继承自View。虽然Android开发人员基本上都听说过,但是真正用的可能不多。 ViewStub可以理解成一个非常轻量级的View,与其他的控件一样,有着自己的属性及...

Global site tag (gtag.js) - Google Analytics