Android--自訂控制項(一) LayoutInflater

來源:互聯網
上載者:User

標籤:

LayoutInflater一定不會陌生,都會知道它主要是用於載入布局的

因為載入布局的任務通常都是在Activity中調用setContentView()

setContentView()方法 的內部就是用LayoutInflater實現的。、只不過這部分源碼是internal的,不太容易查看到

1、擷取到LayoutInflater的執行個體

法1、

LayoutInflater layoutInflater = LayoutInflater.from(context);  

 

法2、

LayoutInflater layoutInflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);  

 

其實第一種就是第二種的簡單寫法,只是Android給我們做了一下封裝而已。得到了LayoutInflater的執行個體之後就可以調用它的inflate()方法來載入布局了,

layoutInflater.inflate(resourceId, root);  

inflate()方法一般接收兩個參數,

第一個參數就是要載入的布局id

第二個參數是指給該布局的外部再嵌套一層父布局,如果不需要就直接傳null。這樣就成功成功建立了一個布局的執行個體,之後再將它添加到指定的位置就可以顯示出來了。

 mainLayout.addView(buttonLayout);  

 

LayoutInflater技術廣泛應用於需要動態添加View的時候,比如在ScrollView和ListView中,經常都可以看到LayoutInflater的身影。

 

LayoutInflater其實就是使用Android提供的pull解析方式來解析布局檔案的。

 

createViewFromTag()這個方法,並把節點名和參數傳了進去。看到這個方法名,我們就應該能猜到,它是用於根據節點名來建立View對象的。確實如此,在createViewFromTag()方法的內部又會去調用createView()方法,然後使用反射的方式建立出View的執行個體並返回。

 

 

LinearLayout的父布局確實是一個FrameLayout,而這個FrameLayout就是由系統自動幫我們添加上的。

 

我們調用setContentView()方法時所傳入的布局其實就是放到這個FrameLayout中的,這也是為什麼這個方法名叫作setContentView(),而不是叫setView()。

 

Android--自訂控制項(一) LayoutInflater

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.