Android 使用者介面(User Interface)概要

來源:互聯網
上載者:User

在Android應用程式中,使用View和ViewGroup對象來建立使用者介面。有很多類型的View和ViewGroup類,它們都是View類的後代。

View對象是Android平台上使用者介面的基礎單元。View類用於叫做“widgets“子類的基類,它提供了UI對象完全實現,像文本域和按鈕。ViewGroup用於叫做“layouts”子類的基類,它提供了不同類型的布局結構,像線性布局、表格版面配置、相對布局。

一個View對象就是一個資料結構,它的屬性儲存了螢幕的特定矩形地區的布局參數和內容。View對象會處理它自己的尺寸、布局、描畫、焦點變更、滾動和跟駐留在螢幕特定矩形地區互動的鍵/手勢等特性。作為使用者介面中的一個對象,一個View也是給使用者的一個互動點,並且接受互動的事件。

View的階層

在Android平台上,你會像顯示的那樣,使用View和ViewGroup節點的階層來定義一個Activity的UI,這個階層樹能夠根據你的需要簡化或複雜化,並且你能夠使用Android預定義的一組構件和布局來構建UI,或者建立你自己的定製的View。

為了把View層次樹展現到螢幕上,你的Activity必須調用setContentView()方法,並且把這個View引用傳遞給根節點對象。Android系統接受這個引用,並且使用這個引用來廢止、計算和繪製新的View階層樹。階層的根節點請求它的子節點依次繪製它們自己。每個ViewGroup節點負責調用它自己的每個子View來繪製它們自己。子節點可以請求它們在父節點中的尺寸和位置,但是父物件能夠最終決定每個子節點的大小和位置。Android會依次解析你的布局中的元素(從階層樹的頂部),執行個體化View類,並且把它們添加到它們的父容器中。因為這些是依次繪製的,所以如果有位置重疊的元素,那麼最後繪製的元素將位於之前在那個位置繪製的對象之上。

布局(Layout)

定義你的布局和表現View層次樹的最常見方法是用一個XML布局檔案。XML像HTML那樣給給布局提供一個可讀的結構。XML中每個元素既可以是一個View對象也可以是一個ViewGroup對象(或者是它們的子類)。View對象是階層樹中的葉子,ViewGroup對象是階層樹中的分支。

一個XML元素的名字對應了它所代表的Java類的名字,因此一個<TextView>元素要在你的UI中建立一個TextView對象,<linearLayout>元素要建立一個LinearLayout的ViewGroup對象。當你裝載布局資源時,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元素(或其他類型的ViewGroup對象),來拉長View的階層樹,並建立一個更複雜的布局。

有關更多建立UI布局的資訊,請看“XML布局”專題

你能有各種方式來布局你UI介面。使用多種不同類型的ViewGroup對象,你能夠用無限多的方法來構建子View和ViewGroup對象。Android提供了一些叫做布局的預定義的ViewGroup對象,包括LinearLayout、RelativeLayout、TableLayout、GridLayout等。每個布局組件都提供一組唯一的用於定義子View位置和布局結構的布局參數。

要學習更多的用於布局的不同類型的ViewGroup對象,請看“常用布局對象”專題

構件(Widgets)

一個Widget是一個用於跟使用者互動介面的View對象。Android提供了一組完整的Widget實現,如,按鈕、檢查框、文本輸入欄位等,因此你能夠快速的構建你的UI。Android還提供了一些更複雜的Widget,如日期選取器、時鐘、縮放控制等。但是你不能限制Android平台提供的Widget類型。如果你更喜歡做一些定製化的事情,並且要建立你自己的可操作的元素,你可以通過定義你自己的View對象或繼承合并既存的Widget來達到自己的目的。

在“定製組件”的開發指南中能夠讀到更多的內容。

android.widget包列出了Android系統提供的全部widget。

輸入事件

一旦你給UI添加了一些View/Widget對象,你就可能想要瞭解有關使用者跟它們的互動,以便能夠執行一些動作。要擷取使用者的輸入事件,你需要做以下兩件事之一:

1.  定義一個事件監聽器並且把它註冊給View對象。通常,你要關注如何監聽事件。View類包含了一組名稱是On<something>的監聽器嵌套介面,每個都是一個回調方法。例如,View.OnClickListener(針對處理View上的“點擊”動作)、View.OntouchListener(針對View內的觸屏事件)、View.OnKeyListener(針對View對象內的裝置按鍵事件)。因此如果想要在它被點擊時(如一個按鈕被選擇時)通知View對象,就要實現OnClickListener監聽器並定義它的onClick()回調方法(點擊按鈕時要執行的動作),並且用setOnClickListener()方法把它註冊給這個View對象。

2.  重寫View類的既存的回調方法。在你實現自己的View類,並且想要監聽它內部發生的特定的事件時,就要這麼做。例如,你能夠處理的事件包括:觸屏事件(onTouchEvent())、軌跡球移動事件(onTrackballEvent())、或裝置的按鍵事件(onKeyDown())。這樣就允許你在這個定製View類內部給每個事件定義預設的行為,並且決定這個事件是否應該傳遞給其他的子View。當你建立一個定製組件時,這是你給這個View類再次定義這些回調方法的唯一的機會。

菜單(Menus)

應用程式的菜單使用應用程式UI的另一個重要部分。菜單為展示應用程式功能和設定提供了可靠的介面。常見的應用程式菜單是通過按裝置上的功能表按鈕來展示的。但是,你也能夠添加操作功能表,可以在在使用者按下一個項目時來展示。

菜單也使用View階層樹的結構,但是你不用自己定義這個結構,相反,你要給你的Activity定義onCreateOptionsMenu()或onCreateContextMenu()回調方法,並且要聲明你想要包含這個菜單的功能表項目。在適合的時機,Android將會自動給菜單建立必要的View階層樹,並且繪製菜單中每一項。

菜單也處理它們自己的事件,因此沒有必要給功能表項目註冊事件監聽器。當功能表項目被選擇時,架構將會調用onOptionsItemSelected()或onContextItemSelected()方法。

跟應用程式布局一樣,有些在XML檔案中聲明功能表項目時使用的選項。

進階主題

一旦你掌握了建立使用者介面的基本知識,你就能夠研究一些建立更複雜的應用程式介面的進階特性。

適配器(Adapters)

有些時候,你會想封裝一個帶有一些非寫入程式碼資訊的ViewGroup類,因此,你要把你View類跟外部的資料來源綁定。你使用一個AdapterView類作為你ViewGroup,並且每個子View都用Adapter中的資料來初始化和填充。

AdapterView對象是ViewGroup類的一個實現,它基於給定的配接器物件來決定它的子View對象。適配器在資料來源(也可能是一個外部字串的數組)和AdapterView(用於顯示資料)之間扮演著一個郵遞員的角色,對於特定的任務,Adapter類有幾個實現,如針對從Cursor對象中讀取資料庫資料的CursorAdapter類,或者是針對讀取數組資料的ArrayAdapter類。

樣式和主題(Styles and Themes)

也許你對標準的Widget外觀不滿意,你能夠建立一些你自己的樣式和主題來修改它們。

1. 樣式是一組格式屬性,你能夠在你布局中把它們作為一個單元應用於獨立的元素。如,你能夠定義一個指定某個文字大小和顏色的樣式,然後把它只應用到指定的View元素。

2. 主題也是一組格式屬性,但是,你能夠把它們作為一個單元應用於應用中的所有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.