Android入門系列(二)--xml和布局-1

不好意思...時隔一年才更新...

該博客由于篇幅較長,分為1,2兩篇,這篇主要介紹在Android中經常使用到的xml是什么以及在Android布局中的應用。下一篇博客將介紹Android的UI布局方式。

用xml描述事物

在詳細介紹xml之前,我們先來看看,我們是怎么描述一種事物的。這里假設我們要描述一本書,可能會做出一下陳述:

這是一本白色封面,標題是《平凡的世界》,作者是路遙,還挺厚的書,呃,多少頁呢,讓我看看,哦,300頁。

這是在自然不過的描述了,因為你的描述對象是跟你一樣的正常人,他很自然的就用他的心智理解了你的描述對象。但是,如果我們要描述給機器(程序)聽呢?這就需要我們提供一種統一格式的描述語言,好讓機器也能通過一段對應的程序來輕易解析出我們要傳達的內容。其中一種描述語言,就是xml。下面我們用xml的方式來重新描述一下。

<Book>
    <title>平凡的世界</title>
    <cover_color>白色</cover_color>
    <author>路遙</author>
    <page_amount>300</page_amount>
</Book>

我們來總結一下xml的基本格式:

  1. xml中描述的對象稱為元素
  2. 所有元素以<>開始,以</>結束
  3. 元素可以包含子元素或者描述信息。(實際上子元素也屬于描述信息)

現在我們來換一種等價的描述方式

<Book
    title = "平凡的世界"
    cover_color = "白色"
    author = "路遙"
    page_amount = "300"
>
</Book>

對于不包含子元素或描述內容的元素,可以簡寫成:

<Book
    title = "平凡的世界"
    cover_color = "白色"
    author = "路遙"
    page_amount = "300"
/>

這里我把原來屬于Book的子元素挪到了尖括號<>內,Book這個元素就沒有子元素了。再來總結一下。

  1. xml中<>內的描述項稱為屬性。
  2. 屬性的格式是 attr = "description"

既然這兩種方式都可以做到同樣的描述,那么用子元素來描述元素和用屬性來描述又什么區別呢?有一個很關鍵的地方是:在xml中,元素是可以包含元素的,也就是說元素下面還可以包含子元素,而屬性只能單獨存在,不可擴展。在官方文檔中有這么一段描述:

415F55D3-5CED-431C-ADB7-33A038227381.png

為了可以實現自由的擴展,我們應該盡量使用子元素來描述元素。

Android中的xml

上面說到,要盡量用子元素來描述父元素,那么屬性有什么用呢?在Android中,卻是經常使用屬性而不是子元素來描述父元素。比如在Android的布局文件中,我們經??吹揭粋€Button是這樣被描述的。

<Button
    android:text="Button"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:id="@+id/button" />

注:這里的wrap_content是指寬度/高度是適應內容的。

Android正是采用了這種不被推薦的形式,這是為什么呢?
我們知道,layout中的xml文件是被用來描述布局的。為了實現一個界面的布局,Android使用了View和ViewGroup來構成整個界面的布局。View很好理解,翻譯成中文,就是一個個控件,比如Button(按鈕),TextView(文本框),ImageView(圖片框)。而ViewGroup,翻譯成中文,控件組,也就是說,它是用來放一組控件的。我們通過一個示意圖來描述它們的關系。


ViewGroup可以包含ViewGroup和View,這樣各種控件就可以被合理的組織渲染到屏幕上了。ViewGroup和View之間實際上就構成了xml中的父元素和子元素的關系。一個布局的頂級元素必定是ViewGroup,它底下包含View和ViewGroup子元素。如果用來描述一個View的內容以子元素呈現的話,就會破壞這種繼承結構。因而,Android采用了屬性來描述ViewGroup和View,Android中的元素只有兩種,要么是ViewGroup,要么是View,它們兩個以如上圖的方式正確組織著,才能正確地渲染出界面。

這就是Android布局中應用xml時反設計的原因,下一篇博客將介紹Android的UI布局方式。

Happy Coding!

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容