ViewStub是一个用于加载布局文件的控件,用于控制在视图中显示那一部分,功能类似于android:visibility属性,可以使用View.Gone来控制某一个视图控件的隐藏和显示。
当然,ViewStub和android:visibility属性还是有一定的区别的,并且有一定的优势。ViewStub在软件启动的时候,软件只加载ViewStub部分的视图,而不加载ViewStub所关联的相应的视图,在有在调用inflate后才加载ViewStub所关联的视图,这样能够减小对手机内存的消耗,而使用View.Gone虽然可以实现对视图控件的隐藏和显示,但是需要在布局文件中提前设置好所有的控件,虽然可以把属性设置为View.Gone,但是在加载相应的视图的时候,依然需要将相应的视图控件全部加载,对内存的消耗太大,所以ViewStub可以起到一定的作用,要适当的使用两者的结合。
但ViewStub有一定的缺陷,它只能加载一次视图控件,加载视图控件之后就不能使用ViewStub再对所关联的视图控件进行设置。
示例代码:
<ViewStub
android:id="@+id/vs"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_marginLeft="5dip"
android:layout_marginRight="5dip"
android:layout_marginTop="10dip"
android:layout="@layout/popupwindow"/>
其中android:layout属性就是其所关联的layout布局
在代码中是findViewById(R.id.vs).inflate();
就可以将所关联的布局显示出来替代ViewStub,同时在ViewStub设置的一些相应的属性也会传递给所关联的布局。
像android:layout_marginLeft="5dip"
android:layout_marginRight="5dip"
android:layout_marginTop="10dip"
都会传递给@layout/popupwindow中的控件