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()方法來繪製顯示對象。各個子顯示對象可以向父對象請求它們在佈局中的大小和位置,但最終決定各個子顯示對象的大小和位置的是父對象。