英文原文链接:http://docs.eoeandroid.com/guide/topics/resources/layout-resource.html
一个布局资源定义了活动中的UI或者UI中的组件的架构。
文件位置*
:res/layout/filename.xml
:这个文件(filename.xml)将会被当作资源ID来使用。
编译资源数据类型*
:指向一个视图View(或其子类)的资源指针。
资源引用*
:用java:R.layout.filename
:用XML: @[package:]layout/filename
语法*
:* 注意* :根元素可以是一个ViewGroup、一个View或者元素,不过必须有且仅有一个根元素。且要包含xmlns:android属性并按上图所示的设置。
元素* :
:它是其它View元素的容器。有很多各种各样的ViewGroup对象且每一个都要用不同的方式来指定子元素的布局。各种各样的布局包括LinearLayout、RelativeLayout和FrameLayout。
:你不该主观断定所有的ViewGroup派生类都能容纳嵌套的View。有些ViewGroup是AdapterView类的实现,因此就只能容纳Adapter类型的子元素。
:* 属性* :
:android:id:
::资源ID。元素唯一的资源标识,你可以在你的应用程序中使用它来获取一个ViewGroup。想要了解更多请参见下面的value for android:id部分。
:android:layout_height:
::尺寸或关键字。必须要有的。该组的高度,用一个尺寸值(或者度量资源 dimension resource)或者关键字("fill_parent"或者"wrap_content").参考下面的有效值(valid values).
:android:layout_weight:
::尺寸和关键字。必须要有的。该组的宽度,(或者度量资源 dimension resource)或者关键字("fill_parent"或者"wrap_content").参考下面的有效值(valid values).
:ViewGroup基类支持更多的属性,且ViewGroup的子类也支持很多属性。所有可用的属性,可以参考ViewGroup类的相关文档(如LinearLayout XML attributes)。
:一个独立的UI组件,通常被称为"部件"("widget").不同种类的视图(View。)对象包括TextView(文本视图),Button(按钮),和CheckBox(多选框)。
:* 属性* :
:android:id:
:资源ID。元素唯一的资源标识,你可以在你的应用程序中使用它来获取一个View。更多资料请参考下面的value for android:id部分。
:android:layout_height:
:尺寸或关键字。必须要有的。该组的高度,用一个尺寸值(或者度量资源 dimension resource)或者关键字("fill_parent"或者"wrap_content").参考下面的有效值(valid values).
:android:layout_weight:
:尺寸和关键字。必须要有的。该组的宽度,(或者度量资源 dimension resource)或者关键字("fill_parent"或者"wrap_content").参考下面的有效值(valid values).
:View基类支持更多的属性,且View的子类也支持很多属性。想了解更信息请阅读Layouts章节。所有可用的属性,可以参考ViewGroup类的相关文档(如TextView XML attributes)。
:任何表示View类对象的元素都能包含这个内容为空的元素,它把屏幕的初始焦点设成其父元素。在每个文件中你只能有一个这样的元素。
:将一个布局文件包含进当前布局中。
:* 属性* :
:layout:
::布局资源。必须要有的。引用一个布局资源。
:android:id:
::资源ID。覆盖包含进来的布局的根视图的ID。
:android:layout_height
::尺寸和关键字。覆盖包含进来的布局的根视图的高度。当android:layout_width也被声明时才有效。
:android:layout_width
::尺寸和关键字。覆盖包含进来的布局的根视图的宽度。当android:layout_height也被声明时才有效。
::只要是被包含的layout资源根元素支持的属性,你都能在元素中将包含进来,并且会覆盖本资源内根元素已定义的属性。
:* 注意* :如果你想要覆盖layout的尺寸,必须同时覆盖android:layout_height和 android:layout_width——不能只覆盖长度或只覆盖宽度。如果你只覆盖其中一个,则不会生效。(其他布局属性,比如宽度,仍然继承原有布局的。)
:另外一种包含布局的方法是用ViewStub这个类。它是一个轻量级的视图,它不会耗费任何布局空间直到你显式的填充它。
:在某一个时刻,才会把android:layout属性所定义的布局资源文件包含进来。想了解更多关于ViewStub的使用,请阅读Layout Tricks:ViewStubs
:一个可选择的根元素,它没有被画在布局结构中。当你知道这个布局将会被放进一个已经包含父视图的布局中,可以用
:元素作为根元素来包含子元素。这样做会非常有用的。当你打算用把一个布局包含进另一个布局中且这个布局并不需要一个不同的ViewGroup容器。使用将会是一个特别有效的方法。想了解更多关于混合布局的信息,请阅读Layout Tricks:Merging.
android:id的值*
:对于ID的值,通常用"@+id/name"这种语法。"+"号表明这是一个新的资源ID且appt工具将会在R.java类中创建一个新的资源整型标号,如果这还没有存在的话。例如:
:其中nameTextbox名现在是附属于这个元素的一个资源ID。你可以在Java代码中用这个ID来引用这个TextView.
findViewById(R.id.nameTextbox);
:这个代码返回一个TextView对象。
:如果你已经定义了一个ID Resource(且它还没有被使用)。然后你可以省略android:id里的'+'号并将此ID赋予View元素。
android:layout_height和 android:layout_width的值*
:可以使用Android支持的度量单位(dimension units,如:px,dp,sp,pt,in,mm)或者下表中的关键字来表示高度和宽度的值。
{|style="border-spacing: 0px;margin: 4px 4px; width: 90%; border-left:1px solid #ccc;border-top:1px solid #ccc; "
|-style="background:#DEE8F1; "
! style="border-right:1px solid #ccc;border-bottom:1px solid #ccc; padding:5px 15px" | 值
! style="border-right:1px solid #ccc;border-bottom:1px solid #ccc; padding:5px 15px" | 描述
|- style=" vertical-align:top;"
| style=" border-right:1px solid #ccc;border-bottom:1px solid #ccc; padding:5px 15px; " |
match_parent
| style="border-right:1px solid #ccc;border-bottom:1px solid #ccc; padding:5px 15px; " |
设置为跟父元素匹配的大小。从API Level 8 开始加入,用以取代fill_parent。
|- style=" vertical-align:top;"
| style=" border-right:1px solid #ccc;border-bottom:1px solid #ccc; padding:5px 15px; " |
fill_parent
| style="border-right:1px solid #ccc;border-bottom:1px solid #ccc; padding:5px 15px; " |
设置为跟父元素匹配的大小。
|- style=" vertical-align:top;"
| style=" border-right:1px solid #ccc;border-bottom:1px solid #ccc; padding:5px 15px; " |
wrap_content
| style="border-right:1px solid #ccc;border-bottom:1px solid #ccc; padding:5px 15px; " |
设置为仅跟元素中内容相匹配的大小。
|}
例子:
:XML文件保存在res/layout/main_activity.xml文件中。
:下面代码表示:在onCreate())方法中,为一个Activity加载一个布局。
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView.(R.layout.main_activity);
}
参见:
* Layouts
* View
* ViewGroup