美文网首页Android技术知识Android知识Android开发
Android入门系列(二)--xml和布局-1

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

作者: voidwalker | 来源:发表于2017-10-19 16:07 被阅读0次

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

    该博客由于篇幅较长,分为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!

    相关文章

      网友评论

        本文标题:Android入门系列(二)--xml和布局-1

        本文链接:https://www.haomeiwen.com/subject/pouzyttx.html