Android XML布局详解(转载)

Android XML布局详解

2014-01-02 15:55:34|  分类:android|  标签:androidxml布局详解|举报|字号订阅

下载LOFTER我的照片书  |

Android XML布局详解 - XML Layouts

XML布局作为用户界面直接作用显示在Activity(活动、界面)上。它定义了布局结构,并把所有在布局里的元素显示给用户,可以在两个方面声明你的布局:

直接在XML文件里声明你的UI元素:Android提供一个简单的XML文件来对应界面要显示的View和它的子类,比如一些工具控件按钮、图片和一些布局等。

在代码里动态的实例化布局元素:在运行的代码里你可以创建视图View和View Group,也可以给它们制定对应的属性,不如高度宽度等。

Android框架提供了这两种定义布局的方式,你可以非常灵活的运用它们。比如,你可以在xml文件里声明你的界面元素,你也可以在代码里修改这些界面元素。

在你的应用程序里用XML文件定义布局你可以更好的将对UI元素的控制和你的逻辑代码分离。你的UI描述在你的程序之外,这就意味着你可以独立的修改重新适配这些界面元素而不必重新编译和修改你的代码。例如:你可以创建不同屏幕大小、方向、语言的XML布局文件,此外,在XML文件里声明布局让你的UI更加可视化、形象化,更容易控制调试界面问题。当然这个文档的重点是教你如何在XML文件里定义布局界面。如果你对在代码中定义View对象有兴趣的话,你可以参考ViewGroup和View类。

通常情况下,在XML文件中声明UI元素的词汇和命名类、构造方法的名字紧密相关。其中元素的名字对应类的名字,属性的名字对应方法的名字。在实际中这种对应关系非常直接,甚至你可以直接猜到在XML属性对应类的那个方法,哪个类对应XML中的元素。也有一些轻微的差异,比如EditText元素有一个text属性,对应的是EditText.setText()方法。

写XML布局文件 -Write the XML

android提供一系列的嵌套元素,你可以用像创建html文件的方式来使用这些元素,用Android的XML元素,你可以非常快的设计你的UI布局和它们所包含的屏幕元素。

每个布局文件必须包含一个根元素,它必须是一个View或ViewGroup对象。如果你定义的根元素,你可以在它内部添加其他的布局对象或者部件来作为它的子元素,逐步建立一个视图层次结构定义到你的根布局中。例如,这里是一个XML布局,使用一个垂直的LinearLayout其中包含一个TextView和一个Button:


为了使你的布局文件能够正确的被编译,除了你需要在XML文件里正确的定义你的布局之外,你还需要以.xml的后缀名来保存该文件,并把它放到android工程的res/layout目录

加载XMl布局 -Load the XML Resource

当您编译您的应用程序,每个XML布局文件被编译成一个视图资源。您应该从您的应用程序代码加载布局资源,在您的Activity.onCreate()回调方法中实现。通过调用setContentView(),传递给它的参考布局资源的形式:例如如果你XML布局作为main_layout.xml保存的,加载它,像这样:

public void onCreate(Bundle savedInstanceState)

{

super.onCreate(savedInstanceState);

setContentView(R.layout.main_layout);

}

在你的程序运行是,onCreate方法会被回调,详细你可以看一下Activity的生命周期。

属性-Attributes

每个View和ViewGroup对象都有对应的属性。有些属性只支持自己的View对象(例如,TextView的的TEXTSIZE属性只是TextView可以使用),有些属性是共有的,比如id属性,因为它们是从根View类继承的。还比如有些属性被认为是“布局参数”,就是描述View对象的某些布局方向,由该对象的父ViewGroup对象定义的属性也是公用的。

ID

在View的视图树里,每一个View视图都有一个整数的唯一标识ID和它相关联。就是说,每一个View都有一个唯一的标识ID。这个ID的引用是一个整数。在XML文件里这个ID通常被制定成字符串,这个ID属性被View的所有视图所共有,就是说在所有的控件里都有这个属性,你会经常的使用它,在XML文件里id标签的语法是:

android:id="@+id/my_button"

在字符串开头的@符号表示,XML解析器应该把后边的字符串作为一个ID来解析和扩展。+号表示,这是一个新的ID并且需要把这个ID的引用放到资源R.java文件里。也有一些资源是android框架提供的,当你需要引用android框架提供的资源时,你并不需要添加其他的符号,但你必须你提供android包的命名空间例如:

android:id="@android:id/empty"

在Android包命名空间的地方,我们现在引用从android.R资源类的ID,而不是当地的资源类。既再导入包的时候我们需要导入android.R资源的ID。创建Views并在程序中引用它们,常用的模式是:

1、定义一个视图或者控件,并给它一个唯一的标识ID

2、创建一个View实例对象,并从布局文件中获得它(一般在onCreate方法里获得).

Button myButton = (Button) findViewById(R.id.my_button);

在一个RelativeLayout布局里,指定View的ID是非常重要的。因为在RelativeLayout布局中,同级的View可以相对另一个同级的View的位置定义,这就需要另一个view提供唯一的表示ID。一个ID在整个项目中可能定义的不是唯一的,但是必须保证在一个xml文件里定义是唯一的,最好的就是在整个项目中定义的ID是唯一的。

布局参数

XML布局属性layout_something被定义为布局参数,它们被View和ViewGroup所恰当的保留。每ViewGroup的类实现一个嵌套类扩展ViewGroup.LayoutParams的。这个子类包含的属性类型定义为每个子视图的大小和位置,作适当的视图组。正如你可以看到下图中,父视图组定义为每个子视图(包括子视图组)的布局参数。

http://developer.android.com/images/layoutparams.png

图片介绍:可视化的视图层次的每个视图的布局参数

请注意,每一个的LayoutParams子类有它自己的语法设定值。每个子元素必须定义相对它父类合适的LayoutParams,尽管它也可以为自己的子类定义不同的LayoutParams。

所有的视图组包括一个宽度和高度(layout_width和layout_height),每个视图需要定义它们。许多的LayoutParams也包括可选的边距和边框。您可以指定宽度和高度精确的值。大部分您将使用这些常量类设置宽度或高度:wrap_content其内容所需的尺寸大小本身。fill_parent(API等级8改名为match_parent,与它的父视图组一样大。在一般情况下,不建议指定一个布局使用绝对单位,如像素的宽度和高度。相反,推荐采用相对测量,如独立的像素密度单位(DP),wrap_content,或fill_parent,因为它有助于确保您的应用程序将在各种设备的屏幕尺寸显示正确。

布局位置

一个View的几何形状是一个矩形。每一个view的位置都可以用一个坐标和两个尺寸所表示,一个坐标指的是相对最左边和相对最顶部的两个点,两个尺寸是指它的高度和宽度。位置和尺寸的单位都是像素。可以调用视图的方法来获得它的位置, getLeft() 返回左侧的或者X的坐标,getTop()返回顶部或者Y的坐标。这两个方法返回的位置都是相对于它的父容器的位置。例如当getLeft()返回20的时候,说明这个view相对于它的父容器的最左边边缘20像素的位置。此外还提供了getRight(),getBottom()方法来满足一些其他的计算,调用getRight()时类似与getLeft()的计算。

大小、填充、边距

view的大小即view的宽度和高度的大小,一个view其实拥有两对值的大小。第一对称为衡量高度和衡量宽度,定义的值的要在其父容器内,可以通过调用getMeasuredWidth()和getMeasuredHeight()得到它的值。第二对简单地称为宽度和高度或有时绘制的宽度和绘制的高度,这些值的定义要以实际屏幕的大小来看,宽度和高度可以通

过调用getWidth()和getHeight()获得。填充表示像素的左,前,右下方的视野。举一个例子让你明白大小、填充、边距的关系的区别。场景 画室里展览的多幅字画。这些字画就想我们程序里的view,每一个字画都有它的长度和宽度,既自己本身的大小,字画都有木头的装潢,字画本身距离这个装潢的距离,既padding填充,padding也有上下左右方向,你可以设置不同的值,每一个字画都距离另外的字画有一定的距离,这个距离既边距,既magin,magin也有自己的上下左右方向,你同样可以制定其值。

更多参考:

http://www.dajo.com.cn/a/boke/anzhuo/2014/0101/257.html

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,921评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 87,635评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,393评论 0 338
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,836评论 1 277
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,833评论 5 368
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,685评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,043评论 3 399
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,694评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 42,671评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,670评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,779评论 1 332
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,424评论 4 321
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,027评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,984评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,214评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,108评论 2 351
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,517评论 2 343

推荐阅读更多精彩内容