Android開發指南-架構主題-使用者介面

來源:互聯網
上載者:User
文章目錄
  • 適配器Adapter

使用者介面User Interface

關鍵類
  1. View
  2. ViewGroup
  3. 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類相對應。所以一個<TextView>元素將在你的UI中產生一個TextView,而 <LinearLayout>則建立一個LinearLayout視圖組。當你載入一個布局資源時,Android系統會根據你布局中的元素初始化這些運行時對象。

舉例來說,一個包含文本視圖和一個按鈕的簡單垂直布局如下:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical" >
<TextView android:id="@+id/text"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Hello, I am a TextView" />
<Button android:id="@+id/button"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Hello, I am a Button" />
</LinearLayout>

請注意:LinearLayout 元素包含了TextView 和Button 對象。你可以在其中另外安置一個LinearLayout (或其它類型的視圖組),以延展這個視圖層次,構建更複雜的布局。

欲獲知更多如何構建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提供了一些預設的風格和主題供你使用,你也可以定製你自己的風格和佈景主題資源。想瞭解更多關於使用風格和主題的內容,請參閱使用風格和主題文檔。
相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.