ViewStub是一个不可见的、大小为0的控件,运行时ViewStub可以滞后加载。当ViewStub置为可见或者调用inflate()的时候,布局就会加载出来。用加载进来的布局取代ViewStub在父布局中的位置。因此,ViewStub只有在调用了setVisibility()或者inflate()之后,才会在层级中显示出来。将ViewStub布局参数设置给ViewStub指定加载的布局。同理,你可以用ViewStub的inflatedId定义或者覆盖ViewStub指定加载的布局id,例如:

<ViewStub 
  android:id="@+id/stub"
android:inflatedId="@+id/subTree" --简单的说就是可以在此处指定布局文件mySubTree的根id
android:layout="@layout/mySubTree"
android:layout_width="120dip"
android:layout_height="40dip" />

    因此,我们可以通过id “stub”找到ViewStub这个控件,布局资源mySubTree加载完之后,ViewStub就会从它的父布局中移除。我们可以通过“subTree”这个id找到这个由布局资源mySubTree创建的view,通过inflatedId这个属性找到这个view。加载进来的新布局被指定宽为120dp,高为40dp。这种加载布局资源的方式如下所示:

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

    当调用inflate方法的时候,加载的布局将取代ViewStub,并且返回这个view的位置。这种方法可以让应用在不执行findViewById这个方法就可以得到布局的引用。以上翻译自官网:https://developer.android.com/reference/android/view/ViewStub.html

    说了这么多到底怎么使用ViewStub这个控件那???首先我们先说一下使用场景:根据某种状态,判断识别并显示某种布局。简单点说,就是A状态下,显示a布局,B状态下,显示b布局。

这种场景大家肯定都遇到过,并且频繁的改变AB状态,就可以频繁的改变ab布局的显示与隐藏。我们之前的方法是将所有控件全都添加到布局上,然后暂时用不到的隐藏掉,需要的时候在显示出来。但是这种做法是极其耗资源的,在加载布局的时候,即使你将暂时不用的控件隐藏掉,但还是会加载进来的,从而耗费了资源。这种时候,官网推荐使用的ViewStub这个控件。

    ViewStub的优点:它是一个轻量级的View,是一个看不见的,不占布局位置,占用资源非常小的控件。我们可以在ViewStub下指定要加载的布局并指定布局id,当我们需要该布局显示的时候,只需要调用ViewStub的inflate()即可。或者setVisibility();

    ViewStub的缺点:ViewStub的inflate()只能调用一次,多次调用会有异常抛出。也就是说我们只能对ViewStub加载的布局控制一次,若想多次控制该布局,需要使用View的可见性来控制。但是ViewStub的setVisibility()和View的可见性达到的效果是一样的,并且setVisibility()可以多次调用。

    最后我在重申一遍ViewStub的使用背景,对view的显示只有一次控制的时候,ViewStub是最好的选择,节省资源。若想多次调用,用View的可见性来实现,用ViewStub的setVisibility()也行。本篇文章参考自http://blog.csdn.net/hitlion2008/article/details/6737537

ViewStub的使用的更多相关文章

  1. ViewStub源码分析

    ViewStub是一种特殊的View,Android官方给出的解释是:一种不可见的(GONE).size是0的占位view,多用于运行时 延迟加载的,也就是说真正需要某个view的时候.在实际项目中, ...

  2. include、merge 、ViewStub

    在布局优化中,Androi的官方提到了这三种布局<include />.<merge />.<ViewStub />,并介绍了这三种布局各有的优势,下面也是简单说一 ...

  3. Android实战技巧:ViewStub的应用

    在开发应用程序的时候,经常会遇到这样的情况,会在运行时动态根据条件来决定显示哪个View或某个布局.那么最通常的想法就是把可能用到的View都写在上面,先把它们的可见性都设为View.GONE,然后在 ...

  4. ViewStub的简单用法和说明

    最近无意间知道了ViewStub,所以特地的去了解了一下 都知道ViewStub是一个不可见的,大小为0的View,实际上跟include差不多,但是ViewStub要更加节约资源.被称为是" ...

  5. Android引导指示层的制作 (ViewStub + SharePreference)

    引导指示界面是个什么鬼东西?一张图即明了:

  6. 【转】Android布局优化之ViewStub

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

  7. Android性能优化之一:ViewStub

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

  8. Android优化——UI优化(三)使用ViewStub延迟加载

    使用ViewStub延迟加载 1.ViewStub延迟加载 ViewStub是一个不可见的,大小为0的View,最佳用途就是实现View的延迟加载,在需要的时候再加载View,可Java中常见的性能优 ...

  9. ViewStub的简单解析和使用场景

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

随机推荐

  1. ubuntu 16.04 Dockerfile 安装mysql

    默认上MariaDB的包并没有在Ubuntu仓库中.要安装MariaDB,我们首先要设置MariaDB仓库. 配置MariaDB 仓库 # apt-get install software-prope ...

  2. Windows多线程多任务设计初步(转)

    Windows多线程多任务设计初步 [前言:]当前流行的Windows操作系统,它能同时运行几个程序(独立运行的程序又称之为进程),对于同一个程序,它又可以分成若干个独立的执行流,我们称之为线程,线程 ...

  3. Excel Sheet Column Title

    Given a positive integer, return its corresponding column title as appear in an Excel sheet. For exa ...

  4. ADO.NET数据访问模板整理

    /// <summary> /// 数据访问类:hi_test /// </summary> public partial class TestDA { public Test ...

  5. Android使用Application的好处

    如果一个应用程序有2个入口的,1个入口程序打开修改其中的内容,怎么实现另一个入口的数据也修改呢? 下面就用到Application来实现数据的共享,因为一个应用程序只有一个Application,Ap ...

  6. 怎么可以让div自适应屏幕的高度?(已解决)

    主要解决问题的方法是用JS脚本. 先看布局, 一个div是首部,另一个div是主体,主体包含左侧菜单和右侧内容. 我想把主体div的高度自适应屏幕剩余区域,怎么做? 首先,获取可见区域的高度,docu ...

  7. Jquery源码学习(第一天)

    jQuery是面向对象的设计通过window.$ = window.jQuery = $; 向外提供接口,将$挂在window下,外部就可以使用$和jQuery $("#div1" ...

  8. SQL Server最近怎样了

    SQL Server最近怎样了 又到年终了,大家都作最后冲刺 最近园子里真的多了很多口水帖,无论大家争论得多么激烈,时间依然滴答滴答地过,争论完之后我们依然要继续埋头苦干 为年终奖.为明年做准备 这里 ...

  9. SQL Server : Browser服务

    SQL Server : Browser服务是SQL Server 2005新增的,简单的说,如果一个物理服务器上面有多个SQL Server实例,那么为了确保客户端能访问到正确的实例,所以SQL S ...

  10. ThoughtWorks代码挑战——FizzBuzzWhizz

    很久没发表过文章了,今天看到一篇文章 最难面试的IT公司之ThoughtWorks代码挑战——FizzBuzzWhizz游戏(C#解法) 看到LZ的2B青年代码,实在是惨不忍睹,故写篇文章来探讨下这类 ...