前言

  关键字: android.view.ViewStub,版本为Android 2.2 r1

  本章翻译来自唐明 ,这里本博负责整理和发布,欢迎其他译者一起参与Android API 的中文翻译行动,联系我over140@gmail.com。

声明

  欢迎转载,但请保留文章原始出处:)

    博客园:http://www.cnblogs.com

    农民伯伯: http://www.cnblogs.com/over140/

正文

  一、结构

    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。

  八、下载

    CSDN:http://download.csdn.net/source/2764163

  九、补充

    文章链接

       【译】使用ViewStub(Layout Tricks: Using ViewStubs)

Android API 中文(14) —— ViewStub的更多相关文章

  1. Android API 中文(77)——AdapterView.OnItemSelectedListener

    前言 本章内容是android.widget.AdapterView.OnItemSelectedListener,版本为Android 2.3 r1,翻译来自"cnmahj",欢 ...

  2. Android API 中文(76)——AdapterView.OnItemLongClickListener

    前言 本章内容是android.widget.AdapterView.OnItemLongClickListener,版本为Android 2.3 r1,翻译来自"cnmahj", ...

  3. android api 中文 (75)—— AdapterView.OnItemClickListener

    前言 本章内容是android.widget.AdapterView.OnItemClickListener,版本为Android 2.3 r1,翻译来自"麦子",欢迎大家与他交流 ...

  4. android api 中文 (74)—— AdapterView.AdapterContextMenuInfo

    前言 本章内容是android.widget.AdapterView.AdapterContextMenuInfo,版本为Android 2.3 r1,翻译来自"cnmahj",欢 ...

  5. 【转】Android API 中文(14) —— ViewStub

    用一个XML源填充view.inflate(上下文对象,资源文件Id,父窗口组一般为null): 原文网址:http://www.cnblogs.com/over140/archive/2010/10 ...

  6. android api 中文 (73)—— AdapterView

    前言 本章内容是android.widget.AdapterView,版本为Android 2.3 r1,翻译来自"cnmahj",欢迎大家访问他的博客:http://androi ...

  7. Android API 中文 ListView

    正文 一.结构 public class RatingBar extends AbsSeekBar java.lang.Object android.view.View android.view.Vi ...

  8. Android API level 与version对应关系

    https://www.cnblogs.com/jinglecode/p/7753107.html Platform Version API Level VERSION_CODE 中文名称 Andro ...

  9. Android API Level与sdk版本对照表

    API等级1: Android 1.0 API等级2: Android 1.1 Petit Four 花式小蛋糕 API等级3: Android 1.5 Cupcake 纸杯蛋糕 API等级4: An ...

随机推荐

  1. [ JS 进阶 ] Repaint 、Reflow 的基本认识和优化

    你是不是经常听师兄或一些前端前辈说不能用CSS通配符 *,CSS选择器层叠不能超过三层,CSS尽量使用类选择器,书写HTML少使用table,结构要尽量简单-DOM树要小....等这些忠告,以前我就大 ...

  2. SGU 208. Toral Tickets

    208. Toral Tickets time limit per test: 0.25 sec. memory limit per test: 65536 KB input: standard ou ...

  3. 面试题15:链表中倒数第K个节点

    类似问题:判断是否是环形节点,寻找中间节点,一个指针一次走一步,另一个指针一次走两步 注意检查三点鲁棒性: 1. 链表为空 2. k为0 3. 链表长度不够k ListNode* FindKthToT ...

  4. 【C#日期系列(二)】--C#获取一段时间有多少个星期几

    #region 统计一段时间内有多少个星期几 ///<summary> ///统计一段时间内有多少个星期几 ///</summary> ///<param name=&q ...

  5. [实战]MVC5+EF6+MySql企业网盘实战(19)——BJUI和ztree

    写在前面 上周在博客园看到一篇通用权限系统的文章,看到他那个UI不错,这里就研究了一下,将网盘的UI修改为他的那个,感兴趣的可以参考:http://b-jui.com/ 系列文章 [EF]vs15+e ...

  6. [实战]MVC5+EF6+MySql企业网盘实战(14)——逻辑重构

    写在前面 上篇文章关于修改文件夹和文件名称导致的找不到物理文件的问题,这篇文章将对其进行逻辑的修改. 系列文章 [EF]vs15+ef6+mysql code first方式 [实战]MVC5+EF6 ...

  7. bzoj 1113

    思路:对于两张高度一样的海报 i, j, 即 y[ i ] = y[ j ], 如果对于任意i < k < j 有y[ k ] > y[ i ] && y[ k ] ...

  8. Python并发编-用Event,线程检测数据库连接的例子

    尝试3次连接数据库 import time import random from threading import Thread,Event def connect_db(e): count = 0 ...

  9. linux下安装Python3.4.1

    1.下载linux 版本的 Python 我是在Windows下下载的,然后共享到linux下. 2.解压文件 tar -xvf Python-3.4.1.tar x是解压 v是查看所有过程 f是使用 ...

  10. angular4 监听input框输入值的改变

    angular中一般控件会有change事件,但是如果某些控件没有这个事件 我们如何监听值的变化呢? 对于双向绑定的值,当值改变后监听事件有如下写法: 1. 如果是ngModel可以用ngModelC ...