android开发当中,我们经常会遇到根据某个条件去控制一个控件的显示/隐藏的情况。虽然setVisibility(int visibility)的确可以达到这样的目的,但是在渲染时,其实隐藏的布局也会执行inflate()方法,造成额外的资源开支(内存),针对这种情况更好的做法就是使用ViewStub这个对象。

根据官网上的描述,ViewStub是一个不可见的(invisible),不占任何空间(zero-sized)的可以用来延时渲染的View对象。我们在布局中可以给他设定layout参数,指定想要替换的布局文件。当我们调用ViewStub的inflate() 或者 setVisibility()方法时,ViewStub将被指定的layout所替代,并且新的view将继承该ViewStub的布局参数。

简单的示例:

<ViewStub android:id="@+id/stub"
android:inflatedId="@+id/subTree"
android:layout="@layout/mySubTree"
android:layout_width="120dip"
android:layout_height="40dip" />

布局中,mySubTree就是我们想要延时渲染的视图。在我们调用inflate()方法后,新渲染的视图会继承ViewStub的布局参数,即,mySubTree这个布局的实际宽高将分别是120dp和40dp。新渲染的视图id将是我们指定的 subTree(对应上面布局中的inflatedId="@+id/subTree")


实际上也没必要再去调用findViewById(int),官方推荐的做法是

 ViewStub stub = (ViewStub) findViewById(R.id.stub);
View inflated = stub.inflate();

inflated就是我们新生成的视图对象。

我们也可以通过setInlfateListener(ViewStub.onInflateListener listener)绑定监听器, 在渲染完成时通过回调对该view进行一些操作。(比如显示指定数据?)

  

android ViewStub延时渲染的应用的更多相关文章

  1. android ViewStub简单介绍

    ViewStub是一种非常灵活的视图,主要用于布局资源的实时加载. ViewStub 的继承类关系如下: public final class ViewStubextends View java.la ...

  2. Android ViewStub的使用方法

    大家写项目的时候肯定会有一些东西提前写好,可是不到一定条件是不想让它显示出来的.我们可能的做法就是让它View.GONE 或View.INVISIBLE等到一定条件了在代码里面这设置View.VISI ...

  3. Android 跨进程渲染

    本项目用于验证 Android 是否能够跨进程渲染 View,最终实现了在子进程创建WebView,主进程显示的功能. 一.跨进程渲染的意义 有一些组件比如 WebView 如果在主进程初始化,会大大 ...

  4. android viewStub

    韩梦飞沙  韩亚飞  313134555@qq.com  yue31313  han_meng_fei_sha 开发应用的时候,需要根据条件决定显示某个视图, 这个时候可以用ViewStub Stub ...

  5. android View未渲染时获得高度

    ViewTreeObserver vto = tv.getViewTreeObserver(); vto.addOnGlobalLayoutListener(new OnGlobalLayoutLis ...

  6. ios中fixed元素在滚动布局中的延时渲染问题

    在之前做的一个demo中,有个视图是内滚动的,里边有个bar用了fixed,不是fixed在最外层视图的顶部和底部,在微信/safari/chrome/其他浏览器app上都没出现问题. 然后今天,我把 ...

  7. 我的Android进阶之旅------>Android中的布局优化 include、merge 、ViewStub

    1.如何重用布局文件? 可以使用<include>标签引用其他的布局文件,并用android:id属性覆盖被引用布局文件中顶层节点的android:id属性值.代码如下: <!--引 ...

  8. Android应用程序请求SurfaceFlinger服务渲染Surface的过程分析

    文章转载至CSDN社区罗升阳的安卓之旅,原文地址:http://blog.csdn.net/luoshengyang/article/details/7932268 在前面一篇文章中,我们分析了And ...

  9. [转]Android Shape渲染的使用(经典,学习研究不后悔)

    原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 .作者信息和本声明.否则将追究法律责任.http://mzh3344258.blog.51cto.com/1823534/1215749 ...

随机推荐

  1. windows server 2003断开远程之后自动注销用户

    windows server 2003断开远程之后自动注销用户 2011-07-30 09:42:52     我来说两句      收藏    我要投稿 最近一台服务器老是断开远程之后过没多久就自动 ...

  2. HP quality center 9.0 邮件设置

    [转载]HP quality center 9.0 邮件设置 (2010-09-20 10:28:03) 转载▼ 标签: 转载   原文地址:HP quality center 9.0 邮件设置作者: ...

  3. MogileFS

    分布式文件系统 ~MogileFS~ 一.分布式文件系统 分布式文件系统(Distributed File System)是指文件系统管理的物理存储资源不一定直接连接在本地节点上,而是通过计算机网络与 ...

  4. angularjs + seajs构建Web Form3

    angularjs + seajs构建Web Form前端(三) -- 兼容easyui 回顾 在上一章中使用了angular实现了ajax form和树形结构,经过以上两章对于angular的大致使 ...

  5. 在线压缩JS的工具

    给大家介绍款在线压缩JS的工具 首先说下该工具的域名:http://javascriptcompressor.com/ 进入后界面如下: 具体要讲下它的功能点:在线压缩 Javascript 源码可以 ...

  6. 欧几里德算法及其扩展(推导&&模板)

    有关欧几里德算法整理: 1.一些相关概念: <1>.整除性与约数: ①一个整数可以被另外一个整数整除即为d|a(表示d整除a,通俗的说是a可以被d整除),其含义也可以说成,存在某个整数k, ...

  7. Sublime2 Text编辑器使用技巧

        Sublime2 Text编辑器使用技巧 ------------------------------------软件使用----------------------------------- ...

  8. 使用EntityFramework持久化聚合

    目录 背景使用EntityFramework持久化聚合备注 背景返回目录 DDD中只有聚合根可以有仓储,仓储负责整个聚合持久化的相关生命周期,在不使用工作单元或POCO的情况下,我们可以让Order内 ...

  9. 鸟哥的LINUX私房菜基础篇第三版 阅读笔记 二

    Linux档案与目录管理 1.一些比较特殊的目录,需要用力的记下来 .         代表当前层目录 ..        代表上一层目录 -        代表前一个工作目录   (这个好屌!其他的 ...

  10. .Net程序员面试试题

    1:简述private protected public internal修饰符的访问权限? private:私有成员在类的内部可以访问: protected:受保护的成员,在类的内部和继承类中可以访 ...