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

布局资源定义了UIActivity或组件的界面架构。

文件位置(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"]
    [V
iewGroup-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"]
        [V
iew-specific attributes] >
       
<requestFocus/>
   
</View>
   
<ViewGroup >
       
<View />
   
</ViewGroup>
   
<include layout="@layout/layout_resource"/>
</ViewGroup>

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

元素(ELEMENTS):

<ViewGroup>

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

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

属性(ATTRIBUTES):

    android:id

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

    android:layout_height

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

    android:layout_width

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

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

<View>

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

属性(ATTRIBUTES):

    android:id

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

    android:layout_height

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

    android:layout_width

    尺寸值或关键词,必须的。它定义元素的宽度,用尺寸值(或尺寸资源)或关键词(fill_parentwrap_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_heightandroid: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_heightandroid:layout_width的值

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

说明

match_parent

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

fill_parent

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

wrap_content

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

定制View元素

你可以创建自己定制的ViewViewGroup元素,并把它们跟标准的布局元素一样应用到布局中。还可以在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);
}

 

 

posted @ 2012-04-26 08:24  移动应用开发  阅读(380)  评论(0编辑  收藏  举报