Android API 中文(14) —— ViewStub

來源:互聯網
上載者:User

前言

  關鍵字: android.view.ViewStub,版本為Android 2.2 r1

  本章翻譯來自唐明 ,這裡本博負責整理和發布,歡迎其他譯者一起參與Android API 的中文翻譯行動,聯絡我over140@gmail.com。

 

聲明

  歡迎轉載,但請保留文章原始出處:)

    部落格園:http://www.cnblogs.com

    農民伯伯: http://www.cnblogs.com/over140/

 

本文

  一、結構

    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)

 

結束

  比較抱歉,上周唐明就已經把稿件交給我了,並叮囑我幫忙校稿,由於自己這邊比較忙一直耽誤到現在才發布,再次感謝他!也歡迎大家提出意見,翻譯不準確的地方也歡迎批評指正。

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.