如何在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为正确的View
( mySubTree
布局的根视图)。
如果你想这样做编程,那么你的代码应该是这样的:
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时,它将被从视图层次中删除。