Android 的 UI 根基 View與View
好了,到這里要恭喜你正式進(jìn)入 Android 基礎(chǔ)的學(xué)習(xí),在后面的章節(jié)會(huì)陸續(xù)出現(xiàn)很多 Android 原生 API,在學(xué)習(xí)之前向大家推薦 Google 官方文檔,里面有很全的 API 功能描述、使用說(shuō)明及使用示例。當(dāng)然,如果英文原版大家上不去,可以訪問(wèn)中文站點(diǎn):Google官方中文文檔,英語(yǔ)盲不要高興的太早,說(shuō)是中文文檔,但其實(shí)內(nèi)容幾乎都是直接 copy 的英文。不過(guò)還是建議大家在學(xué)習(xí)過(guò)程中多多查閱官方文檔。
基礎(chǔ)知識(shí)將從 Android UI(User Interface)開(kāi)始,因?yàn)?UI 是用戶最直接感知到的,也是一個(gè)應(yīng)用展示強(qiáng)大功能的窗口。那么學(xué)習(xí) UI,就不得不先提到 View 和 ViewGroup,它倆是 Android 一切 UI 的根基,所以的窗口布局都依賴它們完成,讓我們一起看看 View 和 Viewgroup 是何許人也。
1. View 和 ViewGroup 的基本概念
1.1 View
首先看看官方的解釋,這是 View 的 API 官方文檔:View官方文檔
簡(jiǎn)單給大家翻譯一下:
窗口中的所有 View(視圖)都排列在一個(gè)樹(shù)形結(jié)構(gòu)中。我們可以通過(guò)代碼也可以用一個(gè)或多個(gè) XML 布局文件來(lái)確定一個(gè)視圖樹(shù)。視圖有許多具體的子類,它們作為控件可以用來(lái)顯示文本、圖像或其他內(nèi)容。
由此可以得出幾個(gè)信息:
- Android 的 UI 是樹(shù)形結(jié)構(gòu)(視圖樹(shù)和前端的 DOM Tree 類似)
- 有兩種方法完成 UI 的編寫(xiě)
- 直接使用代碼
- 用 XML 文件
- 所有看到的 UI 控件都是 View 或者 View 的子類
- View 可以用來(lái)展示多種形式的內(nèi)容
1.2 ViewGroup
接著看看ViewGroup官方文檔
ViewGroup(視圖組合)是可以包含其他 View(稱為子 View)的特殊 View。ViewGroup 是 Layouts 和視圖容器的基類,該類還定義了 ViewGroup.LayoutParams 類,該類也是 layouts 參數(shù)的基類。
由此可得出 3 個(gè)信息:
- ViewGroup 派生自 View,是 View 的子類
- ViewGroup 中可以包含其他的 View 或 ViewGroup,而 View 不行
- ViewGroup 中定義了 LayoutParams,用來(lái)設(shè)置布局的參數(shù)
2. 結(jié)構(gòu)關(guān)系
如本節(jié)標(biāo)題所言,Android 系統(tǒng)中的所有 UI 類都是建立在 View 和 ViewGroup 兩個(gè)類的基礎(chǔ)之上的,所有 View 的子類稱為 Widget(控件),所有 ViewGroup 的子類稱為 Layout(布局),在 Android 源碼中繼承關(guān)系如下圖所示:
可以看到,在 Android 的 UI 中,View 是所有類的基類,我們通過(guò)實(shí)現(xiàn) View 來(lái)完成各種具體的UI展示;而由 View 派生的 ViewGroup 是所有 Layout 的基類,它將各種不同的 View 組合到一起,以下是 View 的組合關(guān)系圖:
3. 兩者的功能分工
其實(shí)通過(guò)兩者的結(jié)構(gòu)關(guān)系也能分析出兩者各自的功能:
View 是所有 UI 組件的基類,基本上所有的高級(jí) UI 組件都是繼承 View 類實(shí)現(xiàn)的,如 TextView(文本框)、Button、List、EditText(編輯框)、Checkbox 等。一個(gè) View 在屏幕占據(jù)一塊區(qū)域,負(fù)責(zé)渲染這塊矩形區(qū)域,也可以處理這塊矩形區(qū)域發(fā)生的事件,并可以設(shè)置該區(qū)域是否可見(jiàn)以及獲取焦點(diǎn)等。
ViewGroup 是容納這些組件的容器,其本身也是從 View 中派生出來(lái)的,功能就是裝載和管理下一層的 View 對(duì)象或 ViewGroup 對(duì)象,也就是說(shuō)它是一個(gè)容納其他元素的容器,負(fù)責(zé)對(duì)添加進(jìn)來(lái)的 View 和 ViewGroup 進(jìn)行管理和布局。
4. 小結(jié)
本節(jié)介紹了 Android UI 中作為鼻祖的兩個(gè)類,所有可視的 UI 控件都是從 View 繼承而來(lái),而這些 View 的排列布局方式則有 ViewGroup 來(lái)組合管理,而編寫(xiě)布局可以通過(guò)代碼或者 XML 的兩種形式,后者更加簡(jiǎn)潔直觀。
其實(shí)大家在實(shí)際的開(kāi)發(fā)中,很少會(huì)去直接使用這兩個(gè)類, Android 源碼已經(jīng)為我們提供了各式各樣豐富的控件和布局,幾乎可以應(yīng)對(duì)我們?nèi)粘i_(kāi)發(fā)的大多數(shù)場(chǎng)景,在后面的課程我們會(huì)學(xué)習(xí)到很多 Android 提供的優(yōu)秀的控件和布局類,大家務(wù)必要在教程中學(xué)好 Android 原生的控件、布局,為今后學(xué)習(xí)編寫(xiě)自定義 View 打下堅(jiān)實(shí)的基礎(chǔ)。