DEVLOG 12.8 問(wèn)題雜記 有關(guān)LayoutInflater
Q1:?LayoutInflater傳遞的context干了什么?
A1:?常見(jiàn)的構(gòu)造layoutInflater的方法:
在第一個(gè)方法中需要傳入context。仔細(xì)查看源碼的話回發(fā)現(xiàn)如下的調(diào)用關(guān)系:

LayoutInflater.from其實(shí)會(huì)最終調(diào)用getSystemService,返回一個(gè)PhoneLayoutInflater:
所以感覺(jué)上直接使用第三種方法,也就是好像會(huì)減少調(diào)用鏈?
如果使用第二種方法的話是最快的,因?yàn)檫@個(gè)方法可以同Acitivity對(duì)應(yīng)的PhoneWindow中獲取在構(gòu)造window過(guò)程中就初始化好的LayoutInflater:
Q2:?LayoutInflater中的root的作用,設(shè)置root會(huì)影響子View的布局過(guò)程嗎?
A2:?Case # 1: root != null && attach2root = true -> 解析當(dāng)前資源所對(duì)應(yīng)的xml,生成temp。使用當(dāng)前的root生成layoutparams,并且將當(dāng)前temp使用這個(gè)layoutparams添加到root中。返回root
Case# 2: root == null &&? attach2root 無(wú)論為true或者false??-> 解析當(dāng)前資源所對(duì)應(yīng)的xml,生成temp。返回temp。
Case#3: root != null && attach2root = false ->?? ?解析當(dāng)前資源所對(duì)應(yīng)的xml,生成temp。使用當(dāng)前的root生成layoutparams。生成的temp調(diào)用setLayoutParams,返回temp。
所以設(shè)置root回影響子View的布局,只要root不為空,就會(huì)影響。