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

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

该博客由于篇幅较长,分为1,2两篇,这篇主要介绍在Android中经常使用到的xml是什么以及在Android布局中的应用。下一篇博客将介绍Android的UI布局方式。

用xml描述事物

在详细介绍xml之前,我们先来看看,我们是怎么描述一种事物的。这里假设我们要描述一本书,可能会做出一下陈述:

这是一本白色封面,标题是《平凡的世界》,作者是路遥,还挺厚的书,呃,多少页呢,让我看看,哦,300页。

这是在自然不过的描述了,因为你的描述对象是跟你一样的正常人,他很自然的就用他的心智理解了你的描述对象。但是,如果我们要描述给机器(程序)听呢?这就需要我们提供一种统一格式的描述语言,好让机器也能通过一段对应的程序来轻易解析出我们要传达的内容。其中一种描述语言,就是xml。下面我们用xml的方式来重新描述一下。


    平凡的世界
    白色
    路遥
    300

我们来总结一下xml的基本格式:

  1. xml中描述的对象称为元素
  2. 所有元素以<>开始,以结束
  3. 元素可以包含子元素或者描述信息。(实际上子元素也属于描述信息)

现在我们来换一种等价的描述方式



对于不包含子元素或描述内容的元素,可以简写成:


这里我把原来属于Book的子元素挪到了尖括号<>内,Book这个元素就没有子元素了。再来总结一下。

  1. xml中<>内的描述项称为属性。
  2. 属性的格式是 attr = "description"

既然这两种方式都可以做到同样的描述,那么用子元素来描述元素和用属性来描述又什么区别呢?有一个很关键的地方是:在xml中,元素是可以包含元素的,也就是说元素下面还可以包含子元素,而属性只能单独存在,不可扩展。在官方文档中有这么一段描述:

Android入门系列(二)--xml和布局-1_第1张图片
415F55D3-5CED-431C-ADB7-33A038227381.png

为了可以实现自由的扩展,我们应该尽量使用子元素来描述元素。

Android中的xml

上面说到,要尽量用子元素来描述父元素,那么属性有什么用呢?在Android中,却是经常使用属性而不是子元素来描述父元素。比如在Android的布局文件中,我们经常看到一个Button是这样被描述的。

注:这里的wrap_content是指宽度/高度是适应内容的。

Android正是采用了这种不被推荐的形式,这是为什么呢?
我们知道,layout中的xml文件是被用来描述布局的。为了实现一个界面的布局,Android使用了View和ViewGroup来构成整个界面的布局。View很好理解,翻译成中文,就是一个个控件,比如Button(按钮),TextView(文本框),ImageView(图片框)。而ViewGroup,翻译成中文,控件组,也就是说,它是用来放一组控件的。我们通过一个示意图来描述它们的关系。


Android入门系列(二)--xml和布局-1_第2张图片

ViewGroup可以包含ViewGroup和View,这样各种控件就可以被合理的组织渲染到屏幕上了。ViewGroup和View之间实际上就构成了xml中的父元素和子元素的关系。一个布局的顶级元素必定是ViewGroup,它底下包含View和ViewGroup子元素。如果用来描述一个View的内容以子元素呈现的话,就会破坏这种继承结构。因而,Android采用了属性来描述ViewGroup和View,Android中的元素只有两种,要么是ViewGroup,要么是View,它们两个以如上图的方式正确组织着,才能正确地渲染出界面。

这就是Android布局中应用xml时反设计的原因,下一篇博客将介绍Android的UI布局方式。

Happy Coding!

你可能感兴趣的:(Android入门系列(二)--xml和布局-1)