• android ViewStub延时渲染的应用


    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进行一些操作。(比如显示指定数据?)

      

  • 相关阅读:
    el-checkbox
    文件上传优化
    二叉树的建立
    二叉树的遍历算法
    两个二进制数多少个位(bit)不同
    二维矩阵置零
    search-a-2d-matrix(二维矩阵查找)
    Ubuntu16.04安装配置Eclipse 以及opencv的使用
    树莓派 自身摄像头的opencv调用
    树莓派3上安装Qt5
  • 原文地址:https://www.cnblogs.com/tergeldev/p/5758282.html
Copyright © 2020-2023  润新知