LayoutInflate用法和解析

LayoutInflate

一妆绞、是什么?

LayoutInflate就是傳說中的布局泵,是用來找res/layout/下的xml布局文件邓夕,并且實例化刘莹;而findViewById()是找xml布局文件下的具體widget控件(如Button、TextView等)焚刚。

二点弯、實例化方法

LayoutInflater 實例的三種方式:

1. LayoutInflater inflater = getLayoutInflater();//調用Activity的getLayoutInflater()

2. LayoutInflater inflater = LayoutInflater.from(context);

3. LayoutInflater inflater = ?(LayoutInflater)context.getSystemService

另外getSystemService()是Android很重要的一個API,它是Activity的一個方法矿咕,根據(jù)傳入的NAME來取得對應的Object抢肛,然后轉換成相應的服務對象。所以碳柱,必須在activity的上下文環(huán)境下才能使用布局泵捡絮,不是想在哪里用就可以用的·;

三莲镣、加載布局 ?inflate(int resource, ViewGroup root,boolean attachToRoot)福稳;

1、 Inflate(resId , null )不能正確處理寬和高是因為:layout_width,layout_height是相對了父級設置的瑞侮,必須與父級的LayoutParams一致灵寺。而加載的view的getLayoutParams為null,不正常顯示区岗,源碼分析主要是沒有設置setLayoutParams(params)略板;

2、Inflate(resId , parent,false)加載的view 可以正確處理慈缔,因為加載的view設置了setLayoutParams(params);這個params正是父類布局generateLayoutParams(attrs);得到的,正常顯示叮称,原來參數(shù)設成什么就是什么

3、Inflate(resId , parent,true )不僅不能夠正確的處理藐鹤,并且返回的是parent瓤檐,和以上兩者返回值有絕對的區(qū)別;

4娱节、部分源碼解析

1挠蛉、默認返回的view 為 View result=root;root為傳進去的root;

2肄满、如果root為true 且attachToRoot則temp.setLayoutParams(params);

if(root!=null) {

params=root.generateLayoutParams(attrs);

if(!attachToRoot) {

temp.setLayoutParams(params);

}


3谴古、

final View temp= createViewFromTag(root,name,attrs,false); 從xml解析出來的view,及我們要顯示的view

4稠歉、如果root為null或者attachToRoot為false掰担,則返回的view 就是我們要顯示的view而不是父類view root

// Decide whether to return the root that was passed in or the

// top view found in xml.

if(root==null|| !attachToRoot) {

result=temp;

}

5、總結

使用 inflate(int resource, ViewGroup root,boolean attachToRoot)怒炸;带饱,一看父類root是誰,而看attachToRoot是否為true,如果要顯示的布局為 FrameLayout->button,傳入的root為FrameLayout勺疼,則返回的就是這個FrameLayout教寂;

6、參考博客

http://blog.csdn.net/lmj623565791/article/details/38171465

http://www.cnblogs.com/top5/archive/2012/05/04/2482328.html

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末执庐,一起剝皮案震驚了整個濱河市酪耕,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌耕肩,老刑警劉巖因妇,帶你破解...
    沈念sama閱讀 222,464評論 6 517
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異猿诸,居然都是意外死亡婚被,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 95,033評論 3 399
  • 文/潘曉璐 我一進店門梳虽,熙熙樓的掌柜王于貴愁眉苦臉地迎上來址芯,“玉大人,你說我怎么就攤上這事窜觉」日ǎ” “怎么了?”我有些...
    開封第一講書人閱讀 169,078評論 0 362
  • 文/不壞的土叔 我叫張陵禀挫,是天一觀的道長旬陡。 經常有香客問我,道長语婴,這世上最難降的妖魔是什么描孟? 我笑而不...
    開封第一講書人閱讀 59,979評論 1 299
  • 正文 為了忘掉前任,我火速辦了婚禮砰左,結果婚禮上匿醒,老公的妹妹穿的比我還像新娘。我一直安慰自己缠导,他們只是感情好廉羔,可當我...
    茶點故事閱讀 69,001評論 6 398
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著僻造,像睡著了一般憋他。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上嫡意,一...
    開封第一講書人閱讀 52,584評論 1 312
  • 那天举瑰,我揣著相機與錄音,去河邊找鬼蔬螟。 笑死,一個胖子當著我的面吹牛汽畴,可吹牛的內容都是我干的旧巾。 我是一名探鬼主播耸序,決...
    沈念sama閱讀 41,085評論 3 422
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼鲁猩!你這毒婦竟也來了坎怪?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 40,023評論 0 277
  • 序言:老撾萬榮一對情侶失蹤廓握,失蹤者是張志新(化名)和其女友劉穎搅窿,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體隙券,經...
    沈念sama閱讀 46,555評論 1 319
  • 正文 獨居荒郊野嶺守林人離奇死亡男应,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 38,626評論 3 342
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了娱仔。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片沐飘。...
    茶點故事閱讀 40,769評論 1 353
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖牲迫,靈堂內的尸體忽然破棺而出耐朴,到底是詐尸還是另有隱情,我是刑警寧澤盹憎,帶...
    沈念sama閱讀 36,439評論 5 351
  • 正文 年R本政府宣布筛峭,位于F島的核電站,受9級特大地震影響陪每,放射性物質發(fā)生泄漏影晓。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 42,115評論 3 335
  • 文/蒙蒙 一奶稠、第九天 我趴在偏房一處隱蔽的房頂上張望俯艰。 院中可真熱鬧,春花似錦锌订、人聲如沸竹握。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,601評論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽啦辐。三九已至,卻和暖如春蜈项,著一層夾襖步出監(jiān)牢的瞬間芹关,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,702評論 1 274
  • 我被黑心中介騙來泰國打工紧卒, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留侥衬,地道東北人。 一個月前我還...
    沈念sama閱讀 49,191評論 3 378
  • 正文 我出身青樓,卻偏偏與公主長得像轴总,于是被迫代替她去往敵國和親直颅。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 45,781評論 2 361

推薦閱讀更多精彩內容