view 詳解 (一) 將view加載到窗口過程分析

1.window類

爲一個抽象類,提供繪製窗口的一組通用api,可以將之理解爲一個載體,各種view在這個載體上顯示

2.phoneWindow 

2.1該類繼承於window類,是window類的具體實現,我們可以通過該類具體去繪製窗口。

2.2 該類包含了一個DecorView對象,DecorView是所有應用窗口的根view

2.3 簡而言之,phonewindow類是吧一個FrameLayout類即DecorView對象進行包裝。在phoneWindow 

部分源碼


3.DecorView類

3.1 該類是phoneWindow類的內部類,是FrameLayout的子類,是一個裝飾的view,比如說title,titleBar,最主要的一點是,它是所有應用窗口的根view


3.2 decorview只有一個子元素爲LinearLayout,代表整個應用界面,包含通知欄,標題欄,內容顯示欄三塊區域

3.3 LinearLayout裏面有兩個FrameLayout子元素 20,爲標題欄顯示界面,21爲內容顯示界面,就是setcontentView()方法載入的佈局界面。

4.Activit調用setContentView(intresId)過程


4.1 從上圖可以看出,Activity.setContentView(int layoutResId) 是在PhoneWindow(Window的實現類)中完成。

4.2 在phoneWindow的setcontentView(int resId)中,如果setContentView是第一次加載,則會調用installDecor(),此方法是創建DecorView,即根視圖,如果不是第一次調用setcontentView,則removeAllViews內容中的所有視圖,

這就解釋了設置titleBar,是否有標題,是否全屏,都要在setContentView之前執行,因爲第一次setContentView,DecorView就已經建立




發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章