viewsub 占位符般的存在
<ViewStub
android:id="@+id/viewstub"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginLeft="2dp"
android:layout="@+layout/viewstublayout" //keyline
</ViewStub>
加载布局时,此布局不加载只有在inflate()或setVisibility (VISIBLE | INVISIBLE) 才可见 看源码可知都是调用inflate()方法
public void setVisibility(int visibility) {
if (mInflatedViewRef != null) {// 如果已经加载过则只设置Visibility属性
....
} else {// 如果未加载,这加载目标布局
super.setVisibility(visibility);
if (visibility == VISIBLE || visibility == INVISIBLE) {
inflate();// 调用inflate来加载目标布局
}
}
}
how to use
public void onClick(View v) {
switch (v.getId()) {
case R.id.button_extend: //显示ViewStub控件内容
View view = mViewStub.inflate();
//不可拿着viewwsub直接操作 要使用下边的view
LinearLayout linearLayout = (LinearLayout) view;
break;
case R.id.button_hide: //隐藏ViewStub控件内容
mViewStub.setVisibility(View.GONE);
break;
}
}
注意:
(1)ViewStub对象只可以Inflate一次,之后ViewStub对象会被置为空。按句话说,某个被ViewStub对象指定的布局被Inflate一次之后,就不可以再次通过ViewStub对象来控制它了。
(2)ViewStub控件只能用来Inflate一个布局文件,而不能Inflate某个具体的View