zoukankan      html  css  js  c++  java
  • Android API 中文(14) —— ViewStub

    前言

      关键字: 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)

  • 相关阅读:
    解决 搭建Jekins过程中 启动Tomcat的java.net.UnknownHostException异常
    射手和农场主
    java 和 JS(javaScript)中的反斜杠正则转义
    分享修改密码的SharePoint Web part: ITaCS Change Password web part
    分享微软官方Demo用的SharePoint 2010, Exchange 2010, Lync 2010虚拟机
    Office 365 的公共网站的一些限制及解决的办法
    SharePoint 2013 关闭 customErrors
    安装 KB2844286 导致SharePoint 2010 XSLT web part 显示出现错误
    安装Office Web Apps Server 2013 – KB2592525安装失败
    如何将hyper-v虚拟机转换成vmware的虚拟机- 转换SharePoint 2010 Information Worker Demonstration and Evaluation Virtual Machine (SP1)
  • 原文地址:https://www.cnblogs.com/ldq2016/p/5386614.html
Copyright © 2011-2022 走看看