Android開發指南-框架主題-用戶界面

用戶界面User Interfaceandroid

關鍵類
View
ViewGroup
Widget classes
在一個Android應用中,用戶界面是由View 和ViewGroup對象構建的。View與ViewGroup都有不少種類,而它們都是View類的子類。數據庫


View對象是Android平臺中用戶界面體現的基礎單位。View類是它稱爲「widgets(工具)」的子類的基礎,它們提供了諸如文本輸入框和按鈕之類的UI對象的完整實現。ViewGroup類一樣爲其被稱爲「Layouts(佈局)」的子類奠基了基礎,它們提供了象流式佈局、表格佈局以及相對佈局之類的佈局架構。數組


View對象是一個數據體,它的屬性存儲了用於屏幕上一塊矩形區域的佈局參數及內容。並負責這塊它所轄的這個矩形區域之中全部測量、佈局、焦點轉換、捲動以及按鍵/觸摸手勢的處理。做爲一個用戶界面對象,View同時也擔任着用戶交互關鍵點以及交互事件接受者的角色。架構


視圖層次View Hierarchy
在Android平臺上,你能夠用下圖所示的View和ViewGroup層次圖來定義一個Activity的UI。這個層次樹可隨你所願的簡單或者複雜化,你能使用Android預約義的一套工具和佈局來建立它,或者使用你本身定義的Views來建立。框架


爲了把一個視圖層次樹展示到屏幕上,你的Activity必須調用setContentView()方法 ,並傳給它一個根節點對象的引用。Android系統將接受此引用,並用來進行界面的廢止、測量並繪製這棵樹。層次的根結點會要求它的子節點進行自我繪製──進而,每一個視圖組節點也負責調用它的子視圖進行自我繪製。子節點將向父節點申請繪製的位置以及大小,而其父類享有子節點繪製的位置及大小的最終決定權。Android依次(自層次樹頂層開始)解析你佈局中的元素,實例化View並將它們添加到它們的父節點中。由於這個過程是依次進行的,因此若是出現了元素重疊的狀況,最後一個繪製的元素將位於全部重疊元素之上顯現。工具


如欲得到更多關於視圖層次如何測算以及繪製細節的討論,情參閱Android如何繪製視圖。
佈局Layout
定義並展示你的視圖層次的最經常使用的方法是使用XML佈局文件。如同HTML同樣,XML爲佈局提供了一種可讀的結構。XML中的每一個元素都是View或ViewGroup對象(抑或它們的子類)。View對象是樹的葉節點,而ViewGroup對象是樹的分支(參閱樓上的視圖層次圖)。佈局

XML元素的名稱與它體現的Java類相對應。因此一個 元素將在你的UI中生成一個TextView,而 則建立一個LinearLayout視圖組。當你載入一個佈局資源時,Android系統會根據你佈局中的元素初始化這些運行時對象。 字體

舉例來講,一個包含文本視圖和一個按鈕的簡單垂直佈局以下:編碼

http://schemas.android.com/apk/res/android"              android:layout_width="fill_parent"               android:layout_height="fill_parent"              android:orientation="vertical" >        請注意:LinearLayout 元素包含了TextView 和Button 對象。你能夠在其中另外安置一個LinearLayout (或其它類型的視圖組),以延展這個視圖層次,構建更復雜的佈局。.net

欲獲知更多如何構建UI佈局的內容,請參閱聲明佈局。

提示:您也能夠用Java代碼來繪製View和ViewGroup對象,並用 addView(View)方法動態的插入新的View和ViewGroup對象。

您有至關多的方法來對視圖進行佈局。使用大量不一樣種類的視圖組,您能夠有近乎無窮的方式來構建子視圖和視圖組。Android提供了一些預約義的視圖組,其中包括LinearLayout, RelativeLayout, AbsoluteLayout, TableLayout, GridLayout以及其它的一些。每一個都爲定義子視圖和佈局結構提供了一套獨特的佈局參數。

欲瞭解其它用於佈局的不一樣種類的視圖組,請參閱普通佈局對象。

部件Widgets
部件是爲用戶交互界面提供服務的視圖對象。Android提供了一套完整的部件實現,包括按鈕、複選框、文本輸入框等,以助於你快速的構建UI。Android還提供了一些更高級的部件,好比日期選擇、時鐘以及縮放控制。但您並無被侷限於Android平臺提供的這些部件上。若是您想建立一些您本身的定製動做元素,您能夠這麼作,只要定義本身的視圖對象或者擴展或合併現有的部件就行。

更多信息參閱構建自定義組件。

您能夠在android.widget包中找到Android提供的部件列表。

用戶界面事件UI Events
當你在用戶界面中加入了一些視圖和工具以後,你可能想要知道如何讓它們與用戶交互,進而實現你的動做。如欲得到用戶界面事件通知,你須要作如下兩件事情之一:

定義一個事件偵聽器並將其註冊至視圖。一般狀況下,這是你偵聽事件的主要方式。View類包含了一大堆命名相似 On <什麼什麼> Listener的接口,每一個都帶有一個叫作On <什麼什麼> ()的回調方法。好比: View.OnClickListener  (用以處理視圖中的點擊),View.OnTouchListener (用以處理視圖中的觸屏事件),以及View.OnKeyListener  (用以處理視圖中的設備按鍵事件)。因此,若是你但願你的視圖在它被」點擊」(好比選擇了一個按鈕)的時候得到通知,你就要實現OnClickListener,定義它的onClick()回調方法(在其中進行相應處理),並將它用setOnClickListener()方法註冊到視圖上。
爲視圖覆寫一個現有的回調方法。這種方法主要用於你本身實現了一個View類,並想偵聽其上發生的特定事件。好比說當屏幕被觸摸(onTouchEvent()),當軌跡球發生了移動(onTrackballEvent())或者是設備上的按鍵被按下(onKeyDown())。這種方式容許你爲本身定製的視圖中發生的每一個事件定義默認的行爲,並決定是否須要將事件傳遞給其它的子視圖。再說一次,這些是View類相關的回調方法,因此你只能在你構建自定義組件時定義它們。
如何在視圖中處理用戶交互請參見處理用戶界面事件文檔。


菜單Menus
應用程序菜單是應用程序用戶界面中另一個重要的組成部分。菜單爲展示應用程序功能和設置提供了一個可靠的界面。按下設備上的MENU鍵會調出最普通的應用程序菜單。然而,你也能夠加入當用戶長按一個項目時調出的上下文菜單。

菜單也是用視圖層次進行構架的,但你沒必要本身定義這個架構。你只要爲你的Activity定義onCreateOptionsMenu() 和 onCreateContextMenu() 回調方法,並聲明你想要包含在菜單中的項目就好了。Android將爲你的菜單自動建立視圖層次,並在其中繪入你的菜單項。

菜單會自行處理它們的事件,因此你沒必要爲你菜單中的項目註冊事件偵聽器。當你菜單中的一項被選定時,框架將自動調用 onOptionsItemSelected() 或 onContextItemSelected() 方法。

如同應用程序佈局同樣。你也能夠在一個XML文件中定義你菜單中的項目。

更多信息,請參閱建立菜單。

高級話題Advanced Topics
一旦你對建立用戶界面的基礎瞭如指掌,你就能夠嘗試着用一些高級功能來建立更加複雜的應用程序界面。

適配器Adapter
有時候你會想要用一些沒法硬編碼的信息來填充視圖組。你想將源於外部的數據綁定到你的視圖中。爲達到這個目的,你可使用AdapterView做爲你的視圖組,並用Adapter傳來的數據初始化每一個子視圖並填入其中。

AdapterView對象是一個用給定的Adapter對象爲基礎構建它的子視圖的ViewGroup實現。而Adapter在你的數據源(多是一個外部字符串數組)和顯示這些數據的AdapterView之間扮演着一個信使的角色。針對特定的任務有着不少不一樣的Adapter類實現,好比CursorAdapter依據Cursor讀出一個數據庫的數據,而一個ArrayAdapter則從任一個數組進行讀取。

想要了解如何運用Adapter填充你的視圖,請參見用AdapterView綁定至數據。

風格與主題Styles and Themes
或許你對標準工具的外表不是那麼滿意。爲了解決這個問題,你能夠建立你本身的風格和主題。

風格是一套包含一個或多個格式化屬性的總體,你能夠把它們加諸於你佈局中的單個元素之上。好比,你能夠定義一個包含特定文本字體大小和顏色的風格,並將它單獨施用於特定的視圖元素。
主題也是一套包含一個或多個格式化屬性的總體,但卻應用於一個應用程序中的全部Activity,或單獨一個Activity。好比說,你能夠定義一個包含了特定窗口邊框顏色和版面背景、以及一套字體大小和菜單顏色的主題。這個主題能夠施用於特定的Activity抑或整個應用程序。
風格與主題隸屬於資源。Android提供了一些默認的風格和主題供你使用,你也能夠定製你本身的風格和主題資源。


想了解更多關於使用風格和主題的內容,請參閱使用風格和主題文檔。


本文來自CSDN博客,轉載請標明出處:http://blog.csdn.net/iefreer/archive/2009/08/17/4457113.aspx

相關文章
相關標籤/搜索