Android窗口機(jī)制系列
Android窗口機(jī)制(一)初識(shí)Android的窗口結(jié)構(gòu)
Android窗口機(jī)制(二)Window,PhoneWindow,DecorView,setContentView源碼理解
Android窗口機(jī)制(三)Window和WindowManager的創(chuàng)建與Activity
Android窗口機(jī)制(四)ViewRootImpl與View和WindowManager
Android窗口機(jī)制(五)最終章:WindowManager.LayoutParams和Token以及其他窗口Dialog,Toast
窗口結(jié)構(gòu)

Paste_Image.png
說(shuō)明
- 每一個(gè)Activity都包含一個(gè)Window對(duì)象,Window對(duì)象通常由PhoneWindow實(shí)現(xiàn)
- PhoneWindow:將Decoriew設(shè)置為整個(gè)應(yīng)用窗口的根View。是Window的實(shí)現(xiàn)類。它是Android中的最基本的窗口系統(tǒng),每個(gè)Activity 均會(huì)創(chuàng)建一個(gè)PhoneWindow對(duì)象,是Activity和整個(gè)View系統(tǒng)交互的接口。
- DecorView:頂層視圖,將要顯示的具體內(nèi)容呈現(xiàn)在PhoneWindow上. DecorView是當(dāng)前Activity所有View的祖先,它并不會(huì)向用戶呈現(xiàn)任何東西,它主要有如下幾個(gè)功能,可能不全:
- A. Dispatch ViewRoot分發(fā)來(lái)的key、touch、trackball等外部事件;
- B. DecorView有一個(gè)直接的子View,我們稱之為System Layout,這個(gè)View是從系統(tǒng)的Layout.xml中解析出的,它包含當(dāng)前UI的風(fēng)格,如是否帶title、是否帶process bar等。可以稱這些屬性為Window decorations。
- C. 作為PhoneWindow與ViewRoot之間的橋梁,ViewRoot通過(guò)DecorView設(shè)置窗口屬性。//可以這樣獲取 View view = getWindow().getDecorView();
- DecorView只有一個(gè)子元素為L(zhǎng)inearLayout。代表整個(gè)Window界面,包含通知欄,標(biāo)題欄,內(nèi)容顯示欄三塊區(qū)域。DecorView里面TitleView:標(biāo)題,可以設(shè)置requestWindowFeature(Window.FEATURE_NO_TITLE)取消掉ContentView:是一個(gè)id為content的FrameLayout。我們平常在Activity使用的setContentView就是設(shè)置在這里,也就是在FrameLayout上
下篇文章將跟大家講解他們的是如何聯(lián)系的,以及他們的理解。
Android窗口機(jī)制(二)Window,PhoneWindow,DecorView,setContentView源碼理解:http://www.itdecent.cn/p/e42b638944ae