精美化妆品网站模板,网页游戏开服表就上囧游村,新的营销方式有哪些,高品质网站建设公司前言关键字#xff1a; android.view.ViewStub#xff0c;版本为Android 2.2 r1本章翻译来自唐明 #xff0c;这里本博负责整理和发布#xff0c;欢迎其他译者一起参与Android API 的中文翻译行动#xff0c;联系我over140gmail.com。 声明 欢迎转载#xff0c;但请保留文…前言 关键字 android.view.ViewStub版本为Android 2.2 r1 本章翻译来自唐明 这里本博负责整理和发布欢迎其他译者一起参与Android API 的中文翻译行动联系我over140gmail.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值。例如: 通过studid可以找到被定义的ViewStub对象。加载布局资源文件mySubTree 后 ViewStub对象从其父容器中移除。可以通过idsubTree找到由布局资源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或INVISIBLEinflate()将被调用并且加载视图资源在父容器中替换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。 八、下载 CSDNhttp://download.csdn.net/source/2764163 九、补充 文章链接 【译】使用ViewStubLayout Tricks: Using ViewStubs 结束 比较抱歉上周唐明就已经把稿件交给我了并叮嘱我帮忙校稿由于自己这边比较忙一直耽误到现在才发布再次感谢他也欢迎大家提出意见翻译不准确的地方也欢迎批评指正。