View是如何被添加到屏幕窗口上的

一澄阳、View是如何被添加到屏幕窗口上的轩拨?

1)找到入口:setContentView(int layoutResID)


掰邢、

? ? 點進去,進入 Activity的 setContentView()昧甘。

? ? 2)getWindow()是什么命黔?

? ? ? ?從這里可以看出呜呐,getWindow()就是單純返回一個 Window對象。

根據(jù)注釋悍募,得知 Window是作為最高級別的視圖添加到 WindowManager蘑辑,并且 PhoneWindow是它的唯一實現(xiàn)類。也就是說坠宴,getWindow.setContentView()直接去看 PhoneWindow的setContentView()干了些什么就可以了洋魂。

? ? 3)PhoneWindow的?setContentView() 做了些什么?

? ?接著看 installDecor()里面的代碼喜鼓,里面太長副砍,有150行,只好刪掉一些不太重要的代碼庄岖。

? ? 4)PhoneWindow的 installDecor()干了些什么豁翎?

刪掉了大部分的什么 background、UI隅忿、Logo心剥、Title、Icon這類的設(shè)置背桐,把核心的提取优烧。

?mDecor = generateDecor(-1)里面干了些什么?

結(jié)論:生成一個 DecorView對象链峭,此對象本質(zhì)是一個 FrameLayout畦娄!

下面看 5)論證。

mContentParent = generateLayout(mDecor)里面干了什么?

結(jié)論:得到一個 FrameLayout纷责。

下面看 6)論證捍掺。

? ? 5)generateDecor(-1)里面干了些什么撼短?

刪掉大部分代碼再膳,可以看出,返回了一個 DecorView對象曲横,那么這個 DecorView是什么東東喂柒?

官方?jīng)]有注釋,但是可以知道禾嫉,實際上灾杰, DecorView就是一個 FrameLayout。

6)generateLayout(mDecor)里面干了什么熙参?


? ? 1艳吠,通過各種判斷,設(shè)置一大堆樣式孽椰,主題特性等昭娩。setFlags()、requestFeauter()黍匾。

? ? 2栏渺,通過不同的 feature值,選定 layoutResource的值锐涯,并執(zhí)行 mDecor.onResourcesLoaded()

? ? 3磕诊,獲取系統(tǒng)主布局。final int ID_ANDROID_CONTENT = com.android.internal.R.id.content;

點進去就是這么個 ID纹腌。

? ? 結(jié)論:返回一個 contentParent霎终,這本質(zhì)是一個 FrameLayout。(證明看 7)

7)mDecor.onResourcesLoaded()干了些什么升薯?

? ? 通過 layoutReouce創(chuàng)建一個 View對象莱褒,此對象可以就是上面根據(jù)不同 feature選取的值,例如:R.layout.screen_simple(系統(tǒng) XML)覆劈,在通過 addView()把 View對象加載到 DecorView上保礼。

通過查看,這個根據(jù)不同條件選擇的必定含有的 ID:content责语,本質(zhì)是一個 FrameLayout炮障。

繼續(xù)回到 Activity的 setContentView()

8)mLayoutInflater.inflate(layoutResID, mContentParent)

最后,將在activity上設(shè)置的布局 layoutResID 加載到 contentParent上 也就是 FrameLayout上坤候。至此胁赢,我們的整個View就加載并顯示到屏幕上了。


總結(jié):

? ? 1).創(chuàng)建頂層的布局容器DecorView白筹。

? ? 2)在頂層布局中加載基礎(chǔ)布局的ViewGroup

? ? 3)將ContentView添加到基礎(chǔ)布局中的FrameLayout中智末。

view是如何被添加到屏幕窗口上的谅摄?

? ??首先系統(tǒng)會創(chuàng)建一個頂層布局容器DecorView。DecorView 是一個ViewGroup容器系馆, 繼承FrameLayout送漠,是PhoneWindow對象持有的一個實例,他是所有應(yīng)用程序的頂層View由蘑,在系統(tǒng)內(nèi)部進行初始化闽寡。當(dāng)DecorView 初始化完成后,系統(tǒng)會根據(jù)應(yīng)用程序的頂層特性會加載一個基礎(chǔ)容器尼酿,例如no_actionBar等爷狈,不同的主題加載的基礎(chǔ)容器也不一樣,但是無論什么樣的的基礎(chǔ)容器一定會有一個?android.R.di.content?的FrameLayout裳擎。開發(fā)者通過setContView設(shè)置的xml 涎永,通過解析后就加載到了這個FrameLayout中

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市鹿响,隨后出現(xiàn)的幾起案子羡微,更是在濱河造成了極大的恐慌,老刑警劉巖抢野,帶你破解...
    沈念sama閱讀 211,290評論 6 491
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件拷淘,死亡現(xiàn)場離奇詭異,居然都是意外死亡指孤,警方通過查閱死者的電腦和手機启涯,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,107評論 2 385
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來恃轩,“玉大人结洼,你說我怎么就攤上這事〔骢耍” “怎么了松忍?”我有些...
    開封第一講書人閱讀 156,872評論 0 347
  • 文/不壞的土叔 我叫張陵,是天一觀的道長筷厘。 經(jīng)常有香客問我鸣峭,道長,這世上最難降的妖魔是什么酥艳? 我笑而不...
    開封第一講書人閱讀 56,415評論 1 283
  • 正文 為了忘掉前任摊溶,我火速辦了婚禮,結(jié)果婚禮上充石,老公的妹妹穿的比我還像新娘莫换。我一直安慰自己,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 65,453評論 6 385
  • 文/花漫 我一把揭開白布拉岁。 她就那樣靜靜地躺著坷剧,像睡著了一般。 火紅的嫁衣襯著肌膚如雪喊暖。 梳的紋絲不亂的頭發(fā)上惫企,一...
    開封第一講書人閱讀 49,784評論 1 290
  • 那天,我揣著相機與錄音哄啄,去河邊找鬼雅任。 笑死风范,一個胖子當(dāng)著我的面吹牛咨跌,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播硼婿,決...
    沈念sama閱讀 38,927評論 3 406
  • 文/蒼蘭香墨 我猛地睜開眼锌半,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了寇漫?” 一聲冷哼從身側(cè)響起刊殉,我...
    開封第一講書人閱讀 37,691評論 0 266
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎州胳,沒想到半個月后记焊,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,137評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡栓撞,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,472評論 2 326
  • 正文 我和宋清朗相戀三年遍膜,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片瓤湘。...
    茶點故事閱讀 38,622評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡瓢颅,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出弛说,到底是詐尸還是另有隱情挽懦,我是刑警寧澤,帶...
    沈念sama閱讀 34,289評論 4 329
  • 正文 年R本政府宣布木人,位于F島的核電站信柿,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏醒第。R本人自食惡果不足惜渔嚷,卻給世界環(huán)境...
    茶點故事閱讀 39,887評論 3 312
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望淘讥。 院中可真熱鬧圃伶,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,741評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至侥猩,卻和暖如春榔至,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背欺劳。 一陣腳步聲響...
    開封第一講書人閱讀 31,977評論 1 265
  • 我被黑心中介騙來泰國打工唧取, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人划提。 一個月前我還...
    沈念sama閱讀 46,316評論 2 360
  • 正文 我出身青樓枫弟,卻偏偏與公主長得像,于是被迫代替她去往敵國和親鹏往。 傳聞我的和親對象是個殘疾皇子淡诗,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 43,490評論 2 348

推薦閱讀更多精彩內(nèi)容