從純sdk及framwork的角度看,android中界面框架相關(guān)的類型有:Window,WindowManager,View等。下面就以這幾個類為出發(fā)點來概覽下安卓開發(fā)的“界面架構(gòu)”。
Window
該類接觸不多,和它密切相關(guān)的View類就比較熟悉了。
Window和View的關(guān)系
View是可視界面上的一個矩形區(qū)域,它顯示內(nèi)容并接收各種交互事件。所有View形成一個ViewTree這樣的結(jié)構(gòu),對應(yīng)任何一個界面通過sdk自帶的hierarchyviewer工具就可以看到所有View對象形成的視圖樹的形象的結(jié)構(gòu)圖,相信都不會陌生。
一般的,開發(fā)工作主要是利用系統(tǒng)及自定義控件組合完成各種界面,所以理解View的使用和原理更重要些。再進一步,以ViewTree為整體,再看它和window,系統(tǒng)服務(wù)之間的關(guān)系可以從整體上把握android中界面框架。
Window類的描述如下:
Window: Abstract base class for a top-level window look and behavior policy. An instance of this class should be used as the top-level view added to the window manager. It provides standard UI policies such as a background, title area, default key processing, etc.
Window表示“窗口”的概念,類似桌面OS中的窗口的概念,它是對用戶界面的一個邏輯劃分。可以參考下Windows編程中對Window類的描述是:“The point of interaction between a user and a standalone application is a window.”。每個窗口對應(yīng)一個獨立的交互(可以是完整屏幕大小的)界面。
可以認為窗口是系統(tǒng)區(qū)分不同界面(不同app,或者同一app的不同Activity等)的一個單位。窗口之間可以包含(容器和子窗口),可以重疊(窗口具有z軸深度)。
窗口本身沒有顯示內(nèi)容的能力,它包含一個頂級的View對象來持有一棵ViewTree。
一句話概況:窗口是一個獨立的可交互界面,不同窗口疊加顯示,窗口包含View來顯示內(nèi)容。
android中的UI就是View組成的ViewTree來表達的,root view或者說頂部(top level)的View對象作為對整個ViewTree執(zhí)行消息傳遞,測量,布局和繪制等遍歷操作的全局入口,持有此root view就相當(dāng)于持有