Android viewStub應用

1.viewstub是一個輕量級的 view,他是一個看不見的,不佔佈局位置,佔用資源很小的控件。java

能夠爲viewstub指定一個佈局,在inflate佈局的時候,只有viewstub會被初始化。而後當viewstub被設置爲可見的時候,或者調用了inflate()的時候,viewstub所指向的佈局就會被inflate和實例化,而後viewstub的佈局屬性都會傳給所指向的佈局,這樣子,就能夠使用viewstub來方便在運行時,有選擇的顯示某一個佈局android

viewstub特色:app

他只能inflate一次,以後viewstub對象會被設置爲空換句話說,某一個被viewstub指定的佈局被inflate以後,這個ViewStub就從View層次中移除了,就不會再經過viewstub來控制他了dom

viewstub只能用來inflate一個佈局文件,而不是某個具體的view,固然也能夠吧某個view寫在某個佈局文件中ide

 viewstub_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:gravity="center_horizontal">
  <ViewStub 
    android:id="@+id/viewstub_textview"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_marginLeft="5dip"
    android:layout_marginRight="5dip"
    android:layout_marginTop="10dip"
    android:layout="@layout/viewstub_textview_layout"/>
  <ViewStub 
    android:id="@+id/viewstub_iamgeview"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_marginLeft="5dip"
    android:layout_marginRight="5dip"
    android:layout="@layout/viewstub_imageview_layout"/>
</LinearLayout>

 當你準備inflate ViewStub時,調用inflate()方法便可。你還能夠設定ViewStubVisibilityVISIBLEINVISIBLE,也會觸發inflate。注意的是,使用inflate()方法能返回佈局文件的根View
viewstub_textview_layout.xmlspa

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
  xmlns:android="http://schemas.android.com/apk/res/android"
  android:orientation="vertical"
  android:layout_width="wrap_content"
  android:layout_height="wrap_content">
    <TextView
        android:id="@+id/viewstub_demo_textview"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:background="#aa664411"
        android:textSize="16sp"/>
</LinearLayout>

viewstub_imageview_layout.xmlcode

 

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
  xmlns:android="http://schemas.android.com/apk/res/android"
  android:orientation="vertical"
  android:layout_width="wrap_content"
  android:layout_height="wrap_content">
    <ImageView
        android:id="@+id/viewstub_demo_imageview"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"/>
</LinearLayout>

代碼:xml

 

package com.test;
import android.app.Activity;
import android.os.Bundle;
import android.view.ViewStub;
import android.widget.ImageView;
import android.widget.TextView;

public class ViewStubDemo extends Activity {
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.viewstub_main);
        if ((((int) (Math.random() * 100)))>50) {
            // to show text
            // all you have to do is inflate the ViewStub for textview
            ViewStub stub = (ViewStub) findViewById(R.id.viewstub_textview);
            stub.inflate();
            TextView text = (TextView) findViewById(R.id.viewstub_demo_textview);
            text.setText("我如今心情很很差,有的時候人是否是應該對本身狠一點," +
            		"或許真的應該來一個破釜沉舟,人生就是一個棋局,每一步都是一" +
            		"個賭博!失去一個棋子,只要將帥安在,不到最後,也不能判定就是輸家");
        } else {
            // to show image
            // all you have to do is inflate the ViewStub for imageview
            ViewStub stub = (ViewStub) findViewById(R.id.viewstub_iamgeview);
            stub.inflate();
            ImageView image = (ImageView) findViewById(R.id.viewstub_demo_imageview);
            image.setImageResource(R.drawable.gallery_01);
        }
    }
}

結果:對象

隨機數大於0.5小於1顯示的結果:

隨機數大於0小於0.5顯示的結果:

相關文章
相關標籤/搜索