布局资源
布局资源定义Activity或UI组件中UI的体系结构。
文件位置:
res/layout/filename.xml
文件名将用作资源ID。
编译资源数据类型:
指向View(或子类)资源的资源指针。
资源参考:
在Java中:R.layout.filename
在XML中:@ [package:] layout / filename
语法:
<?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" | "match_parent" | "wrap_content"]
android:layout_width=["dimension" | "match_parent" | "wrap_content"]
[ViewGroup-specific attributes] >
<View
android:id="@[+][package:]id/resource_name"
android:layout_height=["dimension" | "match_parent" | "wrap_content"]
android:layout_width=["dimension" | "match_parent" | "wrap_content"]
[View-specific attributes] >
<requestFocus/>
</View>
<ViewGroup >
<View />
</ViewGroup>
<include layout="@layout/layout_resource"/>
</ViewGroup>
注意:根元素可以是ViewGroup,View或<merge>元素,但必须只有一个根元素,并且它必须包含带有android命名空间的xmlns:android属性,如图所示。
元素:
<ViewGroup>
其他View元素的容器。有许多不同类型的ViewGroup对象,每个对象都允许您以不同的方式指定子元素的布局。不同种类的ViewGroup对象包括LinearLayout,RelativeLayout和FrameLayout。
您不应该假设ViewGroup的任何派生都将接受嵌套视图。一些ViewGroups是AdapterView类的实现,它仅从适配器确定其子节点。
属性:
android:id
资源ID。元素的唯一资源名称,可用于从应用程序获取对ViewGroup的引用。有关android:id的更多信息,请参阅下面的内容。
android:layout_height
维度或关键字。必要。组的高度,作为维值(或维度资源)或关键字(“match_parent”或“wrap_content”)。请参阅下面的有效值。
android:layout_width
维度或关键字。必要。组的宽度,作为维值(或维度资源)或关键字(“match_parent”或“wrap_content”)。请参阅下面的有效值。
ViewGroup基类支持更多属性,ViewGroup的每个实现都支持更多属性。有关所有可用属性的参考,请参阅ViewGroup类的相应参考文档(例如,LinearLayout XML属性)。
<View>
单个UI组件,通常称为“小部件”。不同种类的View对象包括TextView,Button和CheckBox。
属性:
android:id
资源ID。元素的唯一资源名称,可用于从应用程序获取对View的引用。有关android:id的更多信息,请参阅下面的内容。
android:layout_height
维度或关键字。必要。元素的高度,作为维度值(或维度资源)或关键字(“match_parent”或“wrap_content”)。请参阅下面的有效值。
android:layout_width
维度或关键字。必要。元素的宽度,作为维度值(或维度资源)或关键字(“match_parent”或“wrap_content”)。请参阅下面的有效值。
View基类支持更多属性,View的每个实现都支持更多属性。阅读布局了解更多信息。有关所有可用属性的参考,请参阅相应的参考文档(例如,TextView XML属性)。
<requestFocus>
表示View对象的任何元素都可以包含此空元素,该元素在屏幕上显示其父对象的初始焦点。每个文件只能包含其中一个元素。
<include>
在此布局中包含布局文件。
属性:
layout
布局资源。需要。引用布局资源。
android:id
资源ID。覆盖包含在布局中的根视图的ID。
android:layout_height
维度或关键字。覆盖包含的布局中给根视图的高度。仅在声明了android:layout_width时才有效。
android:layout_width
维度或关键字。覆盖包含的布局中给根视图的宽度。仅在声明了android:layout_height时才有效。
您可以在<include>中包含所包含布局中根元素支持的任何其他布局属性,它们将覆盖根元素中定义的那些属性。
警告:如果要使用<include>标记覆盖布局属性,则必须覆盖android:layout_height和android:layout_width,以使其他布局属性生效。
包含布局的另一种方法是使用ViewStub。它是一个轻量级的View,在你明确地膨胀它之前不会占用任何布局空间,此时它包含一个由android:layout属性定义的布局文件。有关使用ViewStub的更多信息,请阅读按需加载视图。
<merge>
未在布局层次结构中绘制的备用根元素。当您知道此布局将放置在已包含相应父视图的布局中以包含<merge>元素的子元素时,将此作为根元素非常有用。当您计划使用<include>将此布局包含在另一个布局文件中时,这尤其有用,并且此布局不需要不同的ViewGroup容器。有关合并布局的更多信息,请阅读使用<include />重新使用布局。
android:id的值
对于ID值,通常应使用以下语法形式:“@ + id / name”。加号+表示这是一个新的资源ID,aapt工具将在R.java类中创建一个新的资源整数(如果它尚不存在)。例如:
<TextView android:id="@+id/nameTextbox"/>
nameTextbox名称现在是附加到此元素的资源ID。然后,您可以引用与Java关联的ID的TextView:
findViewById(R.id.nameTextbox);
此代码返回TextView对象。
但是,如果您已经定义了ID资源(并且尚未使用它),则可以通过排除android:id值中的加号来将该ID应用于View元素。
android的值:layout_height和android:layout_width:
高度和宽度值可以使用Android支持的任何维度单位(px,dp,sp,pt,in,mm)或以下关键字表示:
Value | Description |
match_parent | 设置维度以匹配父元素的维度。在API级别8中添加以弃用fill_parent。 |
wrap_content | 仅将尺寸设置为适合此元素内容所需的尺寸。 |
自定义视图元素
您可以创建自己的自定义View和ViewGroup元素,并将它们作为标准布局元素应用于布局。您还可以指定XML元素中支持的属性。有关详细信息,请参阅Custom Components开发人员指南。
例子:
保存在res / layout / main_activity.xml的XML文件:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical" >
<TextView android:id="@+id/text"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Hello, I am a TextView" />
<Button android:id="@+id/button"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Hello, I am a Button" />
</LinearLayout>
此应用程序代码将在onCreate()方法中加载Activity的布局:
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main_activity);
}
参阅
- Layouts
View
ViewGroup