ViewStub相当于include,对于layout布局是十分有用的。
ViewStub组件和<include>标签的作用类似,主要是为了提高布局的重用性,及布局的模块化。它们之间最大的差别是,ViewStub中的布局不会随着它所在布局的渲染而渲染,而<include>标签中的布局会随着它所在布局的渲染而渲染,ViewStub中的布局只有在你需要的时候才会渲染到主界面中。
下面是一个简单的例子。
在button下有一个viewstub,当点击buttonone是把它显示出来,这个viewstub中是与stub_red.xml这个layout相关联的。要显示它很简单,只要调inflate()这个方法就可以了。
注意:
其中android:inflatedId="@+id/myid",表示加载后的viewid,没有加载之前通过这个viewid是查找不到任何view的,加载之后就可以了
main.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android = "http://schemas.android.com/apk/res/android"
android:orientation = "vertical"
android:layout_width = "fill_parent"
android:layout_height = "fill_parent" android:id="@+id/lin1"
>
<Button
android:id = "@+id/show"
android:text = "ButtonOne"
android:layout_width = "wrap_content"
android:layout_height = "wrap_content"
/>
<ViewStub
android:id = "@+id/viewStub" android:inflateId="@+id/myid" android:layout_marginLeft="60dip"
android:layout = "@layout/viewstub_red"
android:layout_width = "90dip"
android:layout_height = "40dip"
/>
</LinearLayout>
viewstub.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
xmlns:android = "http://schemas.android.com/apk/res/android"
android:layout_width = "fill_parent"
android:layout_height = "fill_parent"
android:background = "@color/red">
<TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="hello world"></TextView>
</LinearLayout>
MainActivity
package com.bivin;
import android.app.Activity;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewStub;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.LinearLayout;
import android.widget.Toast;
public class MainActivity extends Activity {
private ViewStub mViewStub;
private Button mShow;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
mViewStub = (ViewStub) findViewById(R.id.viewStub);
mShow = (Button) findViewById(R.id.show);
mShow.setOnClickListener(new OnClickListener() {
public void onClick(View view) {
if (mViewStub != null) {
mViewStub.inflate();
}
}
});
}
}