2014年8月22日 星期五

Android的LayoutInflater真是博大精深啊!!!

public View inflate(int resource, ViewGroup root)

這個Inflater裡的函數非常有趣!

「ViewGroup root」帶Null或帶參數...對「int resource」解析的結果會完全不同!



剛剛同事花了半天才發現如果帶「ViewGroup root」,其實回傳的是這個「ViewGroup root」。

一般情況下這沒什麼,但如果「int resource」最外層的ViewGroup是個設計者自行設計的Layout類別,結果Inflater會忽略這個類別,然後只把「int resource」內的ChildView解析出來、加入「ViewGroup root」中。



會不會有點繞口?



詳細一點說明,如果設計者自行設計了一個LinearLayoutA,並且將它用在XML中,而且是包在檔案最外層。

如果帶了個「ViewGroup root」給Inflater,則Inflater會跳過這個LinearLayoutA的XML不去解析。



如果真是這樣,可以做個實驗.......

XML檔最外層是個FrameLayout,但「ViewGroup root」卻是個LinearLayout。

則用一個「FrameLayout frameLayout」參數去接收Inflater的回傳時,肯定會出錯............



等等做實驗!



(十五分鐘後........)

沒錯!實驗結果完全如此!

沒有留言:

張貼留言