Android螢幕元素階層
android.app.Activity
對於一個Android應用來 說,android.app.Activity類執行個體是一個最基本的功能單元。一個Activity執行個體可以做很多的事情,但是它本身無法顯示在螢幕上, 而是藉助於Viewgroup和View,這兩個才是Android平台上最基本的兩個使用者介面表達單元。
android.view.ViewGroup
ViewGroup是一個特殊的View類,它繼承於android.view.View。它的功能就是裝載和管理下一層的View對象和ViewGroup對象。ViewGroup是布局管理器(layout)及view容器的基類。
ViewGroup中,還定義了一個嵌套類ViewGroup.LayoutParams。這個類定義了一個顯示對象的位置、大小等屬性,view通過LayoutParams中的這些屬性值來告訴父級,它們將如何放置。
在這裡,繼承於ViewGroup的一些主要的布局類如下:
1、FrameLayout:最簡單的一個布局對象。它裡面只顯示一個顯示對象。所有的顯示對象都將會固定在螢幕的左上方,不能指定位置。但允許有多個顯 示對象,但後一個將會直接在前 一個之上進行覆蓋顯示,把前一個部份或全部擋住(除非後一個是透明的)。
2、LinearLayout:以單一方向對其中的顯示對象進行排列顯示,如以垂直排列顯示,則布局管理器中將只有一列;如以水平排列顯示,則布局管理器中將只有一行。同時,它還可以對個別的顯示對象設定顯示比例。
3、TableLayout:以擁有任意行列的表格對顯示對象進行布局,每個顯示對象被分配到各自的儲存格之中,但儲存格的邊框線不可見。
4、AbsoluteLayout:允許以座標的方式,指定顯示對象的具體位置,左上方的座標為(0, 0),向下及向右,座標值變大。這種布局管理器由於顯示對象的位置定死了,所以在不同的裝置上,有可能會出現最終的顯示效果不一致。
5、RelativeLayout:允許通過指定顯示對象相對於其它顯示對象或父級對象的相對位置來布局。如一個按鈕可以放於另一個按鈕的右邊,或者可以放在布局管理器的中央。
在Android中,提供了很多的布局管理器,這裡也不一一列舉,開發人員可以根據實際需要,選擇合適的布局管理器。
android.view.View
View 是所有view類的基類,一個view通常佔用螢幕上的一個矩形地區,並負責繪圖及事件處理。View是所有表單組件的基類,是為表單組件服務的,這裡的 表單組件即UI控制項,如一個按鈕或文字框。Android已經為我們提供了一系列的標準UI控制項供我們直接使用,同時,我們也可以通過繼承於 View類或View的子類,來實現我們自訂的UI控制項。
要定製我們自己的UI控制項,需要重載View類中的一些方法,以下表格列出View提供出來的,供重載的方法,這些方法不必都要重載,但至少要實現onDraw(android.graphics.Canvas)方法。
類別 |
方法 |
描述 |
Creation |
Constructors |
|
onFinishInflate() |
當View和它的所有子物件從XML中匯入之後,調用此方法 |
Layout |
onMeasure(int, int) |
View會調用此方法,來確認自己及所有子物件的大小 |
onLayout(boolean, int, int, int, int, int, int) |
當View要為所有子物件分配大小和位置時,調用此方法 |
onSizeChanged(int, int, int, int) |
當View大小改變時,調用此方法 |
Drawing |
onDraw(Canvas) |
當View要繪製它的內容時,調用此方法 |
Event processing |
onKeyDown(int, KeyEvent) |
當一個新的按鍵事件發生時,調用此方法 |
onKeyUp(int, KeyEvent) |
當一個按鍵釋放事件發生時,調用此方法 |
onMotionEvent(MotionEvent) |
當一個動作事件(如觸摸)發生時,調用此方法 |
Focus |
onFocusChanged(boolean, int) |
當View獲得或失去焦點時,調用此方法 |
Attaching |
onAttachedToWindow() |
當View附加到一個表單上時,調用此方法 |
onDetachedFromWindow() |
當View離開它的表單時,調用此方法 |
當你為一個 activty 添加一個可見的 view, 並且運行這個activty時,android通常情況下會自動按照下列順序來觸發view的相關事件
onAttachedToWindow
onMeasure
onSizeChanged
onLayout
onDraw
對於Android應用中的一個螢幕,它的螢幕元素是按階層來描述的。要將一個螢幕元素層次樹綁定在一個螢幕上顯示,Activity會調用它 的 setContentView()方法並且傳入這個層次樹的根節點引用。當Activity被啟用並且獲得焦點時,系統會通知activity並且請求根 節點去計算並繪製樹,根節點就會請求它的子節點去繪製它們自己。
每個樹上的ViewGroup節點會負責繪製它的子節點。ViewGroup會計 算它的有效空間,布局所有的子顯示對象,並最終調用所有的子顯示對象的 Draw()方法來繪製顯示對象。各個子顯示對象可以向父物件請求它們在布局中的大小和位置,但最終決定各個子顯示對象的大小和位置的是父物件。