深入理解VIew加載

學(xué)習(xí)心得URL

1.LayoutInfater

LayoutInfater內(nèi)部調(diào)用

LayoutInflater layoutInflater = (LayoutInflater) context  
    .getSystemService(Context.LAYOUT_INFLATER_SERVICE);  //通過(guò)Pull解析工廠層層解析生成DOM樹文件

setContextView 外面實(shí)際嵌套了一層FrameLayout(原因如下)

  • 控件的layout_width和layout_height要在父容器下才有用
    因?yàn)槭窍鄬?duì)布局所在位置的寬高, 所以單獨(dú)加載的View的寬高是沒有用的

  • 在infater.from()里頭有三個(gè)參數(shù),通過(guò)查看源碼得知:

    1. 如果root為null,attachToRoot將失去作用,設(shè)置任何值都沒有意義。
  1. 如果root不為null,attachToRoot設(shè)為true,則會(huì)給加載的布局文件的指定一個(gè)父布局,即root。
  2. 如果root不為null,attachToRoot設(shè)為false,則會(huì)將布局文件最外層的所有l(wèi)ayout屬性進(jìn)行設(shè)置,當(dāng)該view被添加到父view當(dāng)中時(shí),這些layout屬性會(huì)自動(dòng)生效。
  3. 在不設(shè)置attachToRoot參數(shù)的情況下,如果root不為null,attachToRoot參數(shù)默認(rèn)為true。

如果有parent設(shè)置 attach to root 默認(rèn)為true 設(shè)置為false則把該布局參數(shù)加到父布局中(意味著源父布局param失效)

2.onMeasure、onLayout、onDraw

3.視圖狀態(tài)與重繪

4.自定義組合控件

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容