新手,在看inflater的时候有点疑问在LayoutInflater.inflater(int resId,ViewGroup root,boolean attchtoroot)这个方法中,其中第三个参数是什么意思,什么时候用true,什么时候用false?
人生最曼妙的风景,竟是内心的淡定与从容!
簡單的來說,如果每個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
attchToRoot
root code>裡。
attchToRoot code>為true時,LayoutInflater.inflater會回傳root而不是被載入的View本身。而在通常情況下,我們載入View都希望對View做一些賦值等操作,也就是說我們比較希望直接得到View本身。所以通常習慣的搭配是root配false這種方式,在View賦值完成之後,在加入到root之中。 🎜
@有明 的答案不能更讚。 如果樓主需要查看更多內容,請閱讀 官方文件
簡單的來說,如果每個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
之中。 🎜@有明 的答案不能更讚。
如果樓主需要查看更多內容,請閱讀 官方文件