Android 控件架構和全屏顯示

概念:
        Android中所有控件在界面中佔得位置均是矩形,分爲ViewGroupView,通過ViewGoup使整個界面形成了一個樹形結構,由上層控件負責下層子控件的測量和繪製,並傳遞交互事件。每棵樹控件的頂部,都有一個ViewParent對象。

我們所用的所有控件都是直接或間接繼承自View的,所用的所有佈局都是直接或間接繼承自ViewGroup的。




Android控件樹結構圖:

ViewGoup:可包含多個子控件,並管理其包含的子控件
ViewParent:控件樹的核心,調度和分配所有的交互管理事件

Android界面架構圖:

 由上圖可看出,每個Activity中都包含一個Window對象,在Android中Wiondw對象通常由PhoneWindow來實現。
PhoneWindow:將一個DecorView設置爲整個應用窗口的根View,來顯示具體的界面內容
DecorView:窗口界面的頂層視圖,裏面封裝了一些窗口操作的通用方法,其把將要顯示的具體內容呈現在了PhoneWindow上,在此所有的View的事件監聽,都通過WindowManagerService(窗口管理服務http://blog.csdn.net/luoshengyang/article/details/8462738)來進行接收,並通過Activity對象來回調相應的onClickListener。
在顯示上,DecorView將屏幕分爲TitleViewContentView兩部分。
ContentView:一個ID爲content的FrameLayoutactivity_main.xml就是設置在這樣一個FramLayout中的。

DocrView標準視圖樹:

         視圖樹的第二層裝載了一個LinearLayout,作爲ViewGroup,這一層的佈局結構會根據對應的參數設置不同的佈局,如最常用的佈局--上面顯示TitleBar下面是Content這樣的佈局,也就是上圖的佈局。而如果用戶通過設置requestWindowFeature(Window.FEATURE_NO_TITLE)來設置全屏顯示,視圖樹中就只有Content了,所以requestWindowFeature()方法一定要在調用setContentView()方法之前。
  • 在代碼中,當程序在onCreat()法中調用setContentView()方法後,ActivityManagerService會回調onResume()方法,此時系統會把整個DocrView添加到PhoneWindow中,並讓其顯示出來。
全屏顯示:通過設置requestWindowFeature(Window.FEATURE_NO_TITLE)來設置全屏顯示,視圖樹中就只有Content了,所以requestWindowFeature()方法一定要在調用setContentView()方法之前。
發佈了38 篇原創文章 · 獲贊 5 · 訪問量 3萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章