`
阿尔萨斯
  • 浏览: 4471656 次
社区版块
存档分类
最新评论

Android_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 值。

例如:

    <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())。

分享到:
评论

相关推荐

    UI_include_merge_ViewStub

    综上所述,`UI_include_merge_ViewStub`这个主题涵盖了Android布局优化的关键技术,包括布局重用、减少视图层级和延迟加载。理解并熟练运用这些技巧,对于提升Android应用的开发质量和效率有着显著的帮助。在实践...

    Android下使用ViewStub控件加载

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

    android 用ViewStub实现Tab选项卡效果

    在Android开发中,创建Tab选项卡效果是一种常见的需求,它能帮助用户在多个视图间进行切换,提高交互体验。ViewStub是一个轻量级的View,通常用于延迟加载布局,它在XML布局文件中占据几乎为0的内存空间,直到被 ...

    DataBinding中ViewStub例子

    在DataBinding中使用ViewStub,首先需要在XML布局文件中定义ViewStub,并设置`android:layout`属性来指定要加载的子布局资源。例如: ```xml &lt;layout xmlns:android="http://schemas.android.com/apk/res/android"&gt;...

    Android ViewStub 页面状态动态切换

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

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

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

    ViewStub的使用简单示例

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

    Android_UI_API最全中文文档

    * ViewStub:提供了视图的占位符方式。 * GridView:提供了网格视图的方式。 这些UI控件可以帮助开发者快速地搭建Android应用程序的用户界面。 Android_UI_API中文文档提供了丰富的UI控件和API接口,帮助开发者...

    Android UI优化之ViewStub标签的使用

    总结来说,ViewStub是Android UI优化的重要工具,通过延迟加载和减少内存占用,可以显著提升应用的性能和用户体验。结合`merge`标签,开发者可以创建更高效、更轻量级的布局。在实际开发中,根据需求灵活运用这些...

    android_relativeLayout_demo

    - 使用`ViewStub`加载不常用或条件显示的视图,提高启动速度。 8. **`ConstraintLayout`对比:** `ConstraintLayout`是Google推荐的现代布局工具,它支持更复杂的约束和动画,而且性能优于`RelativeLayout`。在...

    Android_UI.rar_android_site:www.pudn.com

    最后,为了优化性能,开发者需要关注UI的性能优化,比如避免过度绘制(Overdraw)和深复制(Deep Copy),合理使用ViewStub,以及使用ConstraintLayout来减少布局嵌套。 通过深入学习并实践上述知识点,你将能构建...

    Android布局优化之ViewStub控件

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

    ViewStub_Tab.rar_Tabú_android tab

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

    Android_开发技巧杂集_网络_半透明_异步线程

    根据提供的文件信息,本文将详细解析其中涉及到的关键知识点:如何检查Android应用中的网络连接状态、实现全屏与无标题界面、使用ViewStub进行视图的延迟加载以及如何清除窗口背景。 ### 一、检查Android应用中的...

    Android UI _girlnca_ForYouIWill_android_

    避免使用复杂的嵌套布局,合理使用ViewStub和include标签来减少视图层级,以及利用Data Binding和LiveData等MVVM架构组件来提高代码效率。 11. **测试与迭代**:设计完成后,进行多设备测试,收集用户反馈,并根据...

    Android-UI.rar_android_android ui

    避免过度绘制,减少视图层次,使用ViewStub等轻量级组件,以及合理使用内存缓存,都是提高应用性能的有效手段。 这个“Android-UI.ppt”文件可能包含了以上诸多概念的详细讲解和实例,对于理解Android UI设计和开发...

    Android_布局属性大(1).zip

    3. 使用`ViewStub`延迟加载不常用的视图,节省资源。 4. `android:layout_constraint*`系列属性在ConstraintLayout中实现复杂的约束关系。 四、Android Studio中的布局编辑器 Android Studio提供了可视化布局编辑...

    ViewStub利用ViewStub显示和隐藏布局

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

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

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

    Android组件ViewStub基本使用方法详解

    在Android开发中,ViewStub是一个非常实用的轻量级组件,它主要用于在运行时动态地加载和添加布局资源。这个组件在默认情况下是不可见且占据零尺寸的空间,因此不会影响到其他视图的显示。当需要加载指定的布局时,...

Global site tag (gtag.js) - Google Analytics