android - LayoutInflater.inflater的问题?
黄舟
黄舟 2017-04-17 17:36:02
0
2
442

新手,在看inflater的时候有点疑问
在LayoutInflater.inflater(int resId,ViewGroup root,boolean attchtoroot)这个方法中,
其中第三个参数是什么意思,什么时候用true,什么时候用false?

黄舟
黄舟

人生最曼妙的风景,竟是内心的淡定与从容!

全部回覆(2)
大家讲道理

簡單的來說,如果每個View都需要一個LayoutParams來確定其佈局位置,我們在Layout資源文件中進行的layout前綴的配置,基本上都會記錄在LayoutParams中。但是LayoutParams並不是根據目前View來產生的,而是根據父View來定義的。例如一個TextView存在於LinearLayout中,那麼它擁有的就是基於LinearLayout.LayoutParams的LayoutParams,因為這樣TextView才會擁有LinearLayout所特有的一些佈局屬性。
那也正是如此,當我們使用LayoutInflater.inflater從資源檔案載入View時,最上層的View是沒有父View的,這時候我們在這個View中設定的layout系列參數就有可能應為採用了最基礎的LayoutParams而丟失。為了確保不遺失參數,我們可以提供root,它就是一個父View的參考,表示我們使用的LayoutParams與root類別所提供的LayoutParams一致。在通常情況下,我們就會給出載入的View即將加入的父View對象,這樣一致性更容易保證。 root,它就是一个父View的参考,表示我们使用的LayoutParams与root类所提供的LayoutParams一致。在通常情况下,我们就会给出载入的View即将加入的父View对象,这样一致性更容易保证。
而第三项attchToRoot其实就是一个快捷操作,表示在使用root作为参考时,也同时把View加入到root里,成为root的子View。在Android默认的重载中,我们提供root且不为空时,attchToRoot的值就是true,表示默认就把View加入到了root里。
虽然root和true是Android默认采用的方式,但通常我们不这么使用,因为LayoutInflater.inflater有个很特殊的返回方式,就是当我们传入的attchToRoot为true时,LayoutInflater.inflater会返回root而不是被载入的View本身。而在通常情况下,我们载入View都希望对View进行一些赋值等操作,也就是说我们更希望直接得到View本身。所以通常习惯的搭配是root配false这种方式,在对View赋值完成之后,在加入到root而第三項attchToRoot其實就是一個快捷操作,表示在使用root作為參考時,也同時把View加入到root裡,成為root的子View。在Android預設的重載中,我們提供root且不為空時,attchToRoot的值就是true,表示預設就把View加入到了root code>裡。

雖然root和true是Android預設的方式,但通常我們不這麼使用,因為LayoutInflater.inflater有個很特殊的回傳方式,就是當我們傳入的attchToRoot code>為true時,LayoutInflater.inflater會回傳root而不是被載入的View本身。而在通常情況下,我們載入View都希望對View做一些賦值等操作,也就是說我們比較希望直接得到View本身。所以通常習慣的搭配是root配false這種方式,在View賦值完成之後,在加入到root之中。 🎜
小葫芦

@有明 的答案不能更讚。
如果樓主需要查看更多內容,請閱讀 官方文件

熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板