今天写一下 ViewStub ,内容很简单!java
ViewStub 是一个不可见的,没有尺寸,不会绘制任何东西的布局。主要用于实现 View 的延迟加载,能够避免浪费资源,减小布局的绘画,只有须要的时候才会加载。android
在 ViewStub 加载完成后就会被移除,它所占用的空间就会被新的布局替换。仍是来讲一下具体的用法,比较清晰。
布局
用法code
// 在布局文件中,你就当作普通 View 使用便可 <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:background="@color/colorAccent" android:orientation="vertical"> <TextView android:id="@+id/tv" android:textColor="@android:color/white" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="内容区域"/> <ViewStub android:id="@+id/vs" android:layout_width="match_parent" android:layout_height="300dp" // 当 ViewStub 加载后,就会被下面这个布局占用 android:layout="@layout/activity_main"/> </LinearLayout>
加载 ViewStub 的时候能够使用方法:xml
findViewById(R.id.vs).setVisibility(View.VISIBLE); 或者 View view = (findViewById(R.id.vs).inflate());
注意,若是你不调用上面的方法的话,ViewStub 是不会被加载的,包括 layout 属性中的布局,这也就是上面所说的减小资料,只有你须要了,调用上面的方法才会加载布局。一旦调用上面的方法后 ViewStub 就会变成 null 了。blog
应用场景utf-8
页面自己有一个布局,当因为某些错误,这个布局不加载的时候,这个时候你就能够让 ViewStub 加载你预留的空白布局了。若是提早写两套布局,根据状态使用 VISIBILBE 来调整的话,这种是你在进入这个页面,布局上面全部的控件都会加载,是会浪费资源的(有了这个空白布局一直就处于不显示状态的话)资源