1. 程式人生 > Android入門教學 >Android 的 UI 根基 View與View

Android 的 UI 根基 View與View

好了,到這裡要恭喜你正式進入 Android 基礎的學習,在後面的章節會陸續出現很多 Android 原生 API,在學習之前向大家推薦 Google 官方文件,裡面有很全的 API 功能描述、使用說明及使用示例。當然,如果英文原版大家上不去,可以訪問中文站點:Google官方中文文件,英語盲不要高興的太早,說是中文文件,但其實內容幾乎都是直接 copy 的英文。不過還是建議大家在學習過程中多多查閱官方文件。

基礎知識將從 Android UI(User Interface)開始,因為 UI 是使用者最直接感知到的,也是一個應用展示強大功能的視窗。那麼學習 UI,就不得不先提到 View 和 ViewGroup,它倆是 Android 一切 UI 的根基,所以的窗口布局都依賴它們完成,讓我們一起看看 View 和 Viewgroup 是何許人也。

1. View 和 ViewGroup 的基本概念

1.1 View

首先看看官方的解釋,這是 View 的 API 官方文件:View官方文件
簡單給大家翻譯一下:

視窗中的所有 View(檢視)都排列在一個樹形結構中。我們可以通過程式碼也可以用一個或多個 XML 佈局檔案來確定一個檢視樹。檢視有許多具體的子類,它們作為控制元件可以用來顯示文字、影象或其他內容。

由此可以得出幾個資訊:

  • Android 的 UI 是樹形結構(檢視樹和前端的 DOM Tree 類似)
  • 有兩種方法完成 UI 的編寫
    • 直接使用程式碼
    • 用 XML 檔案
  • 所有看到的 UI 控制元件都是 View 或者 View 的子類
  • View 可以用來展示多種形式的內容

1.2 ViewGroup

接著看看ViewGroup官方文件

ViewGroup(檢視組合)是可以包含其他 View(稱為子 View)的特殊 View。ViewGroup 是 Layouts 和檢視容器的基類,該類還定義了 ViewGroup.LayoutParams 類,該類也是 layouts 引數的基類。

由此可得出 3 個資訊:

  • ViewGroup 派生自 View,是 View 的子類
  • ViewGroup 中可以包含其他的 View 或 ViewGroup,而 View 不行
  • ViewGroup 中定義了 LayoutParams,用來設定佈局的引數

2. 結構關係

如本節標題所言,Android 系統中的所有 UI 類都是建立在 View 和 ViewGroup 兩個類的基礎之上的,所有 View 的子類稱為 Widget(控制元件),所有 ViewGroup 的子類稱為 Layout(佈局),在 Android 原始碼中繼承關係如下圖所示:

繼承關係

可以看到,在 Android 的 UI 中,View 是所有類的基類,我們通過實現 View 來完成各種具體的UI展示;而由 View 派生的 ViewGroup 是所有 Layout 的基類,它將各種不同的 View 組合到一起,以下是 View 的組合關係圖:

組合關係

3. 兩者的功能分工

其實通過兩者的結構關係也能分析出兩者各自的功能:

View 是所有 UI 元件的基類,基本上所有的高階 UI 元件都是繼承 View 類實現的,如 TextView(文字框)、Button、List、EditText(編輯框)、Checkbox 等。一個 View 在螢幕佔據一塊區域,負責渲染這塊矩形區域,也可以處理這塊矩形區域發生的事件,並可以設定該區域是否可見以及獲取焦點等。

ViewGroup 是容納這些元件的容器,其本身也是從 View 中派生出來的,功能就是裝載和管理下一層的 View 物件或 ViewGroup 物件,也就是說它是一個容納其他元素的容器,負責對新增進來的 View 和 ViewGroup 進行管理和佈局。

4. 小結

本節介紹了 Android UI 中作為鼻祖的兩個類,所有可視的 UI 控制元件都是從 View 繼承而來,而這些 View 的排列布局方式則有 ViewGroup 來組合管理,而編寫佈局可以通過程式碼或者 XML 的兩種形式,後者更加簡潔直觀。

其實大家在實際的開發中,很少會去直接使用這兩個類, Android 原始碼已經為我們提供了各式各樣豐富的控制元件和佈局,幾乎可以應對我們日常開發的大多數場景,在後面的課程我們會學習到很多 Android 提供的優秀的控制元件和佈局類,大家務必要在教程中學好 Android 原生的控制元件、佈局,為今後學習編寫自定義 View 打下堅實的基礎。