編輯:Android開發實例
正文
一、結構
public final class ViewStub extends View
java.lang.Object
android.view.View
android.view.ViewStub
二、類概述
ViewStub 是一個隱藏的,不占用內存空間的視圖對象,它可以在運行時延遲加載布局資源文件。當ViewStub可見,或者調用 inflate()函數時,才會加載這個布局資源文件。 該ViewStub在加載視圖時在父容器中替換它本身。因此,ViewStub會一直存在於視圖中,直到調用setVisibility(int) 或者inflate()為止。ViewStub的布局參數會隨著加載的視圖數一同被添加到ViewStub父容器。同樣,你也可以通過使用inflatedId屬性來定義或重命名要加載的視圖對象的Id值。例如:
通過"stud"id可以找到被定義的ViewStub對象。加載布局資源文件"mySubTree "後, ViewStub對象從其父容器中移除。可以通過id"subTree"找到由布局資源"mySubTree"創建的View。這個視圖對象最後被指定為寬120dip,高40dip。執行加載布局資源文件的推薦方式如下:
當inflate()被調用, 這個ViewStub被加載的視圖替代並且返回這個視圖對象。這使得應用程序不需要額外執行findViewById()來獲取加載視圖的引用。
(譯者注:這個類大概意思是用ViewStub類和在XML文件裡面指定的布局資源文件關聯起來,讓布局資源文件在需要使用的時候再加載上去。主要作用是性能優化,什麼時候用什麼時候加載,不用在開始啟動的時候一次加載,既可以加快程序的啟動速度,又可以節省內存資源。)
三、嵌套類
接口 ViewStub.OnInflateListener 一個用於接收ViewStub已經成功加載布局資源文件的通知的監聽器。
四、XML屬性
屬性名稱
相關方法
描述
android:inflatedId
setInflatedId(int)
覆蓋待加載視圖的id值。
android:layout
setLayoutResource(int)
為待加載的資源視圖提供一個標識,在ViewStub變為可見或獲取焦點時使用它。(譯者注:要引用的布局資源文件id)
五、構造函數
ViewStub(Context context, int layoutResource)
創建一個與指定的布局資源文件關聯的ViewStub對象。
參數
layoutResource 要加載的布局資源文件的id值。
六、公共方法
public void draw (Canvas canvas)
手動在指定的畫布繪制這個視圖(及所有其子視圖)。這個視圖必須在調用這個函數之前做好了整體布局。當要自己實現一個視圖時,不要重載這個方法;相反,你應該重載onDraw(Canvas)方法。(譯者注:主要用於自定義的視圖組件的方法。)
參數
canvas 這個畫布傳到那個已渲染的視圖對象。
public int getInflatedId ()
返回加載的布局資源文件的ID,如果加載的布局資源文件的id是NO_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。如果這個id為NO_ID,這個加載視圖保持它原來的id不變。
相關XML 屬性
android:inflatedId
參數
inflatedId 一個正整數來標識這個加載視圖或者NO_ID將保持加載視圖原來的id。
參見
getInflatedId()
public void setLayoutResource (int layoutResource)
設置待加載的布局資源文件,當ViewStub被設置為visible或invisible或調用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)
當可見性設置為VISIBLE或INVISIBLE,inflate()將被調用,並且加載視圖資源在父容器中替換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。
八、下載
CSDN:http://download.csdn.net/source/2764163
九、補充
文章鏈接
【譯】使用ViewStub(Layout Tricks: Using ViewStubs)
轉自:http://www.cnblogs.com/over140/archive/2010/10/18/1853989.html
Android提供了許多方法來控制播放的音頻/視頻文件和流。其中該方法是通過一類稱為MediaPlayer。Android是提供MediaPlayer類訪問內置的媒體播放
Android應用程序可以在許多不同地區的許多設備上運行。為了使應用程序更具交互性,應用程序應該處理以適合應用程序將要使用的語言環境方面的文字,數字,文件等。在本章中,我
自從Fragment出現,曾經有段時間,感覺大家談什麼都能跟Fragment談上關系,做什麼都要問下Fragment能實現不~~~哈哈,是不是有點過~~~ 為了
Android應用程序可以在許多不同地區的許多設備上運行。為了使應用程序更具交互性,應用程序應該處理以適合應用程序將要使用的語言環境方面的文字,數字,文件等。在本章中,我