日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > Android >内容正文

Android

Android API 中文(14) —— ViewStub

發布時間:2023/12/9 Android 43 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Android API 中文(14) —— ViewStub 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.


前言

  關鍵字: 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,如果加載的布局資源文件的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。?

?

  八、下載

    CSDN:http://download.csdn.net/source/2764163

?

  九、補充

    文章鏈接

       【譯】使用ViewStub(Layout Tricks: Using ViewStubs)

?

結束

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

總結

以上是生活随笔為你收集整理的Android API 中文(14) —— ViewStub的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。