Android ViewStub

public final class

ViewStub

extends   View
java.lang.Object
   ↳ android.view.View
     ↳ android.view.ViewStub
ViewStub是一個可隱藏的,不佔用內存空間的試圖對象,他能夠在運行時延遲加載佈局資源文件。當ViwStub設置爲可見,或者調用inflate()方法時,纔會加載這個佈局資源文件。在加載試圖時在父容器中替換它本身,,因此viewStub是一直都存在於試圖中的,當調用setVisibility(int a )或者inflate()爲止,也能夠經過使用inflateid屬性來定義或重命名要加載的試圖對象id:
<ViewStub android:id="@+id/stub"
    android:inflatedId="@+id/subTree"
    android:layout="@layout/mySubTree"
    android:layout_width="120dip"
    android:layout_height="40dip" 
/>

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

當inflate()被調用,這個viewStub被加載的試圖替代並返回這個試圖對象。這使得程序不須要再次執行findviewbyid()來獲取試圖引用。
interface ViewStub.OnInflateListener 用於接收viewstub已經成功加載佈局資源文件的通知的監聽器 
XML Attributes
Attribute Name Related Method Description
android:inflatedId setInflatedId(int) 覆蓋加載試圖的id
android:layout setLayoutResource(int) 爲加載的字體試圖提供一個標示,在viewstub變爲可見或者獲取焦點的時候使用他

構造函數html

         ViewStub(Context context, int layoutResource)java

         建立一個與指定的佈局資源文件關聯的ViewStub對象。android

                   參數web

                            layoutResource   要加載的佈局資源文件的id值。canvas

 

公共方法api

         public void draw (Canvas canvas)函數

         手動在指定的畫布繪製這個視圖(及全部其子視圖)。這個視圖必須在調用這個函數以前作好了總體佈局。當要本身實現一個視圖時,不要重載這個方法;相反,你應該重載onDraw(Canvas)方法。(譯者注:主要用於自定義的視圖組件的方法。佈局

                   參數字體

                            canvas    這個畫布傳到那個已渲染的視圖對象。spa

 

         public int getInflatedId ()

         返回加載的佈局資源文件的ID,若是加載的佈局資源文件的idNO_ID,那麼這個加載的View將保留它原來的id值。

                   相關XML 屬性

                            android:inflatedId

                   返回值

                            一個正整數來標識這個要加載的視圖或者NO_ID將保持加載視圖原來的id

                   參見

                            setInflatedId(int)

 

         public int getLayoutResource ()

         返回加載的佈局資源文件的id值。

                   相關XML 屬性

                            android:layout

                   返回值

                            加載到視圖對象的佈局資源文件id值。

                   參見

                            setLayoutResource(int)

                            setVisibility(int)

                            inflate()

 

         public View inflate ()

         加載getLayoutResource()方法標識的佈局資源,並經過加載佈局資源替換父容器中它本身。

                   返回值

                            這個已加載的佈局資源文件.

 

         public void setInflatedId (int inflatedId)

         設置加載視圖的ID。若是這個idNO_ID,這個加載視圖保持它原來的id不變。

                   相關XML 屬性

                            android:inflatedId

                   參數

                            inflatedId         一個正整數來標識這個加載視圖或者NO_ID將保持加載視圖原來的id

                   參見

                            getInflatedId()

 

         public void setLayoutResource (int layoutResource)

         設置待加載的佈局資源文件,當ViewStub被設置爲visibleinvisible或調用inflate()時使用。這個在加載佈局資源文件時建立的視圖用來在父容器中替換它本身。

                   相關XML 屬性

                            android:layout

                   參數

                            layoutResource       一個有效的佈局資源文件id值(不等於0)。

                   參見

                            getLayoutResource()

                            setVisibility(int)

                            inflate()

 

         public void setOnInflateListener (ViewStub.OnInflateListener inflateListener)

設置成功加載佈局資源文件後事件通知的監聽器。

                   參數

                            inflateListener         OnInflateListener在成功加載後獲得事件通知。

                   參見

                            ViewStub.OnInflateListener

 

         public void setVisibility (int visibility)

當可見性設置爲VISIBLEINVISIBLEinflate()將被調用,而且加載視圖資源在父容器中替換ViewStub

                   參數

                            visibility 設置爲VISIBLE(顯示), INVISIBLE(隱藏), GONE(徹底隱藏,不暫用佈局位置).

                   參見

                            inflate()

 

受保護方法

         protected void dispatchDraw (Canvas canvas)

調用這個函數去繪製這個控件的子視圖。能夠經過派生類重寫在繪製子類以前獲取控制(可是是在他本身的視圖已經被繪製完以後)

                  參數

                            canvas    這個畫布傳到那個已渲染的視圖對象。

 

         protected void onMeasure (int widthMeasureSpec, int heightMeasureSpec)

         測量這個視圖以肯定其內容的高度和寬度。經過measure(int, int)來調用這個方法,而且應該由子類重寫以提升內容測量的效率和精確度。

約定:當該方法被重寫時,你必須調用setMeasuredDimension(int, int)來存儲已測量視圖的高度和寬度。不然將經過measure(int, int)拋出一個IllegalStateException異常。調用父類的onMeasure(int, int)方法是一個有效的辦法。

父類的實現是以背景大小爲默認大小,除非MeasureSpec(測量細則)容許更大的背景。  爲了更好測量內容子類應該重寫onMeasure(int, int)

若是這個方法被重寫,子類有責任確保測量它的高度和寬度至少是視圖的最小寬度和高度(getSuggestedMinimumHeight()getSuggestedMinimumWidth())。

參數

widthMeasureSpec         因爲父類有橫向空間要求,參見View.MeasureSpec

                            heightMeasureSpec        因爲父類有縱向空間要求,參見View.MeasureSpec

相關文章
相關標籤/搜索