ViewStub使用
ViewStub是不可见且不占视图大小在运行的时候可以懒加载的View组件,他只有当可见或者调用了inflate()方法的时候才会加载布局资源,加载的布局资源就会取代在父控件中的ViewStub,同时viewStub也就不复存在了,viewStub的布局属性都会传给它指向的要加载的布局。
因此在设置某些布局属性的时候就尽量加在布局对应的ViewStub上而不是实际的布局上,当在inflate的时候,就可以把对应的属性传给相应的布局了。
总结一下ViewStub的使用场景:
- 只有一次变化的布局,某个布局在inflate以后,就不会有变化,除非重新启动。
- 想要控制显示与隐藏的是一个布局文件,而非某一个View。由代码就可以看出,ViewStub指向的是一个布局文件,而不是某一个view。
<ViewStub
android:id="@+id/viewstub_demo_image"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginLeft="5dip"
android:layout_marginRight="5dip"
android:layout="@layout/viewstub_demo_image_layout"/>
当需要使用的时候,直接viewstub.inflate()就可以了
ViewStub stub = (ViewStub) findViewById(R.id.viewstub_demo_image);
stub.inflate();
ImageView image = (ImageView) findViewById(R.id.viewstub_demo_imageview);
image.setImageResource(R.drawable.happy_running_dog);