亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

全部開發者教程

Android 入門教程

菜單類控件
菜單:Menu
并發編程
多線程

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(視圖組合)是可以包含其他 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 打下堅實的基礎。