您的位置:首页 > 移动开发 > Android开发

Android应用资源---布局资源类型(Layout)

2012-04-26 08:24 337 查看
布局资源定义了UI的Activity或组件的界面架构。

文件位置(FILE LOCATION):

res/layout/filename.xml

文件名被用作资源ID。

被编译资源的数据类型(COMPILED RESOURCE DATATYPE):

资源指向一个View对象或其子类。

资源引用(RESOURCE REFERENCE):

在Java代码中:R.layout.filename

在XML中:@[package:]layout/filename

语法(SYNTAX):

<?xml version="1.0" encoding="utf-8"?>

<ViewGroup
xmlns:android="http://schemas.android.com/apk/res/android"

android:id="@[+][package:]id/resource_name"

android:layout_height=["dimension" |
"fill_parent" | "wrap_content"]

android:layout_width=["dimension" |
"fill_parent" | "wrap_content"]

[ViewGroup-specific
attributes] >

<View

android:id="@[+][package:]id/resource_name"

android:layout_height=["dimension" |
"fill_parent" | "wrap_content"]

android:layout_width=["dimension" |
"fill_parent" | "wrap_content"]

[View-specific
attributes] >

<requestFocus/>

</View>

<ViewGroup
>

<View
/>

</ViewGroup>

<include
layout="@layout/layout_resource"/>

</ViewGroup>

注意:根元素可以是ViewGroup或View类型的元素,也可以是<merge>元素,但是必须只有一个根元素,并且它必须包含xmlns:android属性,像上面显示的那样来指定XML的命名空间。

元素(ELEMENTS):

<ViewGroup>

它是一个其他View元素的容器。有很多不同类型的ViewGroup对象,并且每个都用不同的方法来指定子元素的布局。不同类型的ViewGroup对象包括:LinearLayout、RelativeLayout、以及FrameLayout。

不能假设ViewGroup会接受任何类型View对象的嵌套。某些ViewGroup类是AdapterView类的实现,这就决定了它们的子元素仅能来自Adapter类型。

属性(ATTRIBUTES):

android:id

定义资源的ID,它唯一标识这个元素,在应用程序中能够使用这个ID来获取ViewGroup元素的引用。

android:layout_height

尺寸值或关键词,必须的,它定义了容器的高度,用尺寸值(或尺寸资源)或关键词(fill_parent或wrap_content)来表示。

android:layout_width

尺寸值或关键词。必须的,它定义了容器的高度,用尺寸值(或尺寸资源)或关键词(fill_parent或wrap_content)来表示。

ViewGroup基类会支持多个属性,并且每个实现ViewGroup的子类都会支持这些属性。对于所有这些可用的属性,请参照相应的ViewGroup类文档。

<View>

它定义一个独立的UI组件,通常叫做“widget”。不同的View对象类型包括:TextView、Button、以及CheckBox等。

属性(ATTRIBUTES):

android:id

定义资源ID,它唯一标识资源,在应用程序中能够使用这个ID获取要引用的View对象。

android:layout_height

尺寸值或关键词,必须的。它定义元素的高度,用尺寸值(或尺寸资源)或关键词(fill_parent或wrap_content)表示。

android:layout_width

尺寸值或关键词,必须的。它定义元素的宽度,用尺寸值(或尺寸资源)或关键词(fill_parent或wrap_content)表示。

View基类支持的很多属性,也会被每个实现的View子类所支持。更多的信息可阅读XML布局(http://developer.android.com/guide/topics/ui/declaring-layout.html)。对于所有的可用的属性,请参照对应的View类。

<requestFocus>

它代表任意View对象元素,包括空元素,能够给屏幕上的父容器赋予初始焦点。在每个文件中只能有一个这样的元素。

<include>

把另一个布局文件包含到本布局中。

属性(ATTRIBUTES):

layout

布局资源,必须的。它指向一个要引用的布局资源。

android:id

资源ID。它会覆盖在被包含布局中赋予根View元素的资源ID。

android:layout_height

尺寸值或关键词。它会覆盖在被包含布局中赋予根View元素的高度。只有android:layout_width属性也被声明了,它才会有效。

android:layout_width

尺寸值或关键词。它会覆盖在被包含布局中赋予根View元素的宽度。只有android:layout_height也声明了,它才会有效。

在<include>中能够包含任何其他的由被包含布局中的根元素所支持的布局属性,并且它们会覆盖那些定义在根元素中的值。

警告:如果要覆盖这些布局尺寸,必须同时覆盖android:layout_height和android:layout_width—-不能只覆盖其中之一,如果只覆盖一个,那么不会有任何效果。(其他的布局属性,如重量等依然会继承原始布局。)

包含布局的另一个方法是使用ViewStub元素。它是一个轻量的View,指导明确的要填充它时才会占用布局空间,它用android:layout属性定义一个要包含的布局文件。

<merge>

一个可替代的没有被放到布局层次树中的根元素。当确定要把这个布局放到一个布局中,这个布局已经包含了与之相适应的,能够包含<merge>元素的子元素的父View对象的时候,使用<merge>作为根元素是有用的。在计划使用<include>元素把一个布局包含到另一个布局中,并且这个布局不需要不同的ViewGroup容器时,这种方法就特别有用。关于合并布局的更多信息,请阅读布局技巧:合并(http://developer.android.com/resources/articles/layout-tricks-merge.html)。

关于android:id的值

关于ID值,通常使用的语法格式是:@+id/name。其中“+”指示这是一个新的资源ID,并且如果这个ID不存在,aapt工具在R.java类中创建一个新的资源整数,例如:

<TextViewandroid:id="@+id/nameTextbox"/>

nameTextbox名字就是这个资源的ID。在Java代码中可以下面这样引用与这个ID关联的TextView对象:

findViewById(R.id.nameTextbox);

但是,如果已经定义一个ID资源(并且它没有被使用),那么通过去掉android:id值中的“+”号,能够把这个ID分配给一个View元素。

关于android:layout_height和android:layout_width的值

高度和宽度值能够使用任意的Android所支持的尺寸单位(px、dp、sp、pt、in、mm)来表示或者使用下列关键字:



说明

match_parent

设置元素的尺寸要跟它的父元素相匹配。被添加在API级别8中,以便弃用fill_parent关键字

fill_parent

设置元素的尺寸要跟它的父元素相匹配。

wrap_content

设置元素的尺寸与元素内容所要求的尺寸相匹配。

定制View元素

你可以创建自己定制的View和ViewGroup元素,并把它们跟标准的布局元素一样应用到布局中。还可以在XML元素中指定它所支持的属性。要学习更多的内容,可参考“定制组件”开发指南。(http://blog.csdn.net/fireofstar/article/details/7420378

例子(EXAMPLE):

XML文件被保存在res/layout/main_activity.xml中:

<?xml version="1.0" encoding="utf-8"?>

<LinearLayoutxmlns:android="http://schemas.android.com/apk/res/android"

android:layout_width="fill_parent"

android:layout_height="fill_parent"

android:orientation="vertical">

<TextViewandroid:id="@+id/text"

android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:text="Hello, I am a TextView"/>

<Buttonandroid:id="@+id/button"

android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:text="Hello, I am a Button"/>

</LinearLayout>

应用程序代码会在onCreate()方法中给Activity加载这个布局:

publicvoid onCreate(Bundle
savedInstanceState){

super.onCreate(savedInstanceState);

setContentView.(R.layout.main_activity);

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: