如何在android中使用View Stub

我想在Android中使用ViewStub,所以请帮助我。 我创造了

ViewStub stub = new ViewStub; View inflated = stub.inflate(); 

如何以编程方式使用它?

就像文档说的那样, ViewStub是一个懒洋洋地膨胀的View

你可以像这样在一个XML文件中声明一个ViewStub

  <ViewStub android:id="@+id/stub" android:inflatedId="@+id/subTree" android:layout="@layout/mySubTree" android:layout_width="120dip" android:layout_height="40dip" /> 

android:layout属性是一个引用,该引用将在inflate()的调用旁被膨胀。 所以

 ViewStub stub = (ViewStub) findViewById(R.id.stub); View inflated = stub.inflate(); 

当调用方法ViewStub inflate()ViewStub将从其父ViewStub中移除,并replace为正确的ViewmySubTree布局的根视图)。

如果你想这样做编程,那么你的代码应该是这样的:

 ViewStub stub = new ViewStub(this); stub.setLayoutResource(R.layout.mySubTree); stub.inflate(); 

只需使用ViewStub即可提高渲染布局的效率。 通过使用ViewStub,可以创build手动视图,但不会将其添加到视图层次结构中。 在运行时,可以很容易地膨胀,而ViewStub是膨胀的,viewstub的内容将被replaceviewstub中定义的布局。

activity_main.xml我们定义了viewstub,但是没有先创build。 在这里输入图像说明

简单的例子给人更好的理解

 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/content" android:layout_width="fill_parent" android:layout_height="fill_parent" android:orientation="vertical" > <Button android:id="@+id/btn1" android:layout_width="match_parent" android:layout_height="wrap_content" android:text="create the view stub" /> <Button android:id="@+id/btn2" android:layout_width="match_parent" android:layout_height="wrap_content" android:text="Hide the stub." /> <RelativeLayout android:layout_width="fill_parent" android:layout_height="0dp" android:layout_weight="1" > <ViewStub android:id="@+id/stub_import" android:layout_width="fill_parent" android:layout_height="fill_parent" android:inflatedId="@+id/content_import" android:layout="@layout/splash" /> </RelativeLayout> </LinearLayout> 

在运行时,当我们膨胀时,内容将被replace为viewstub中定义的布局。

 public class MainActivity extends Activity { Button b1 = null; Button b2 = null; ViewStub stub = null; TextView tx = null; int counter = 0; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); b1 = (Button) findViewById(R.id.btn1); b2 = (Button) findViewById(R.id.btn2); b1.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { if (stub == null) { stub = (ViewStub) findViewById(R.id.stub_import); View inflated = stub.inflate(); tx = (TextView) inflated.findViewById(R.id.text1); tx.setText("thanks a lot my friend.."); } } }); b2.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { if (stub != null) { stub.setVisibility(View.GONE); } } }); } 

在这里输入图像说明

所以,让我们再看看视图层次结构,

在这里输入图像说明

当我们膨胀viewstub时,它将被从视图层次中删除。