LayoutInflater.inflate 天天都在用但對它 3 個參數(shù)的含義沒有很好的理解
之前 root 一直傳 null , 現(xiàn)在才知道傳 null 在多數(shù)情況下都是不對的
public View inflate(@LayoutRes int resource, @Nullable ViewGroup root, boolean attachToRoot)
- 第一個參數(shù)是布局ID 沒什么說的
- 第二個參數(shù)是 root, 如果傳了 root , root 的 LayoutParams (布局參數(shù))就會附加到要 inflate 的 view 的布局中。 有時你 root 傳了 null, 發(fā)現(xiàn) view 設(shè)置的寬高等沒有起作用禁荸,這是因為沒有 root 矾兜, view 會按默認(rèn)布局來實例化惧财。 所以 root 一般都是要傳的
- 第三個參數(shù)表示實例化以后的 view 是否添加到 root 中
下面的兩段代碼其實是等價的:
val view = LayoutInflater.from(this).inflate(R.layout.item_header, root, true)
等價于
val view = LayoutInflater.from(this).inflate(R.layout.item_header, root, false)
root.add(view)
如果 root 傳 null, 沒有額外的布局參數(shù)會被附加
關(guān)于返回值: 只有當(dāng) root 不為空且 attachToRoot 為 true 時返回的是 root 的根布局, 其它情況返回的都是要 inflate 的 view 的根布局
注意實例化的 view 不一定是添加到傳入的 root 中痹届, 完全可以把 attachToRoot 設(shè)為 false ,實例化之后再手動 add 到其它的 ViewGroup 中抡驼。
root 只是為實例化過程提供一些布局參考