1.LayoutInfater
LayoutInfater內(nèi)部調(diào)用
LayoutInflater layoutInflater = (LayoutInflater) context
.getSystemService(Context.LAYOUT_INFLATER_SERVICE); //通過Pull解析工廠層層解析生成DOM樹文件
setContextView 外面實(shí)際嵌套了一層FrameLayout(原因如下)
控件的layout_width和layout_height要在父容器下才有用
因?yàn)槭窍鄬?duì)布局所在位置的寬高竟痰, 所以單獨(dú)加載的View的寬高是沒有用的-
在infater.from()里頭有三個(gè)參數(shù)钳降,通過查看源碼得知:
- 如果root為null,attachToRoot將失去作用匆帚,設(shè)置任何值都沒有意義厕诡。
- 如果root不為null蝗锥,attachToRoot設(shè)為true换况,則會(huì)給加載的布局文件的指定一個(gè)父布局此迅,即root。
- 如果root不為null躁劣,attachToRoot設(shè)為false迫吐,則會(huì)將布局文件最外層的所有l(wèi)ayout屬性進(jìn)行設(shè)置,當(dāng)該view被添加到父view當(dāng)中時(shí)账忘,這些layout屬性會(huì)自動(dòng)生效志膀。
- 在不設(shè)置attachToRoot參數(shù)的情況下,如果root不為null鳖擒,attachToRoot參數(shù)默認(rèn)為true溉浙。
如果有parent設(shè)置 attach to root 默認(rèn)為true 設(shè)置為false則把該布局參數(shù)加到父布局中(意味著源父布局param失效)