布局资源
使用集合让一切井井有条
根据您的偏好保存内容并对其进行分类。
布局资源定义了 Activity
中的界面或界面中的组件的架构。
- 文件位置:
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
的任何派生对象都接受嵌套的视图。某些视图组是 AdapterView
类的实现,该类仅从 Adapter
确定其子项。
属性:
android:id
- 资源 ID。元素的唯一资源名称,可用于从应用中获取对
ViewGroup
的引用。如需了解详情,请参阅 android:id 的值部分。
android:layout_height
- 尺寸或关键字。必需。组的高度,采用尺寸值(或尺寸资源)或关键字(
"match_parent"
或 "wrap_content"
)的形式。如需了解详情,请参阅 android:layout_height 和 android:layout_width 的值部分。
android:layout_width
- 尺寸或关键字。必需。组的宽度,采用尺寸值(或尺寸资源)或关键字(
"match_parent"
或 "wrap_content"
)的形式。如需了解详情,请参阅 android:layout_height 和 android:layout_width 的值部分。
ViewGroup
基类支持更多属性,而且 ViewGroup
的每个实现又另外支持很多属性。有关所有可用属性的参考信息,请参阅 ViewGroup
类的对应参考文档(例如,LinearLayout
XML 属性)。
<View>
- 单个界面组件,通常称为“widget”。不同类型的
View
对象包括 TextView
、Button
和 CheckBox
。
属性:
android:id
- 资源 ID。元素的唯一资源名称,可用于从应用中获取对
View
的引用。如需了解详情,请参阅 android:id 的值部分。
android:layout_height
- 尺寸或关键字。必需。元素的高度,采用尺寸值(或尺寸资源)或关键字(
"match_parent"
或 "wrap_content"
)的形式。如需了解详情,请参阅 android:layout_height 和 android:layout_width 的值部分。
android:layout_width
- 尺寸或关键字。必需。元素的宽度,采用尺寸值(或尺寸资源)或关键字(
"match_parent"
或 "wrap_content"
)的形式。如需了解详情,请参阅 android:layout_height 和 android:layout_width 的值部分。
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
:这是一个轻型视图,在对其进行明确膨胀之前,它不会占用任何布局空间。在您使用 ViewStub 后,它会添加由其 android:layout
属性定义的布局文件。如需详细了解如何使用 ViewStub
,请参阅按需加载视图。
<merge>
- 未在布局层次结构中绘制的替代根元素。如果您知道此布局将被放置到一个已包含相应父
View
的布局中,以包含 <merge>
元素的子项,则将此元素用作根元素会非常有用。
当您打算使用 <include>
将此布局添加到另一个布局文件中,并且此布局不需要不同的 ViewGroup
容器时,这样做尤其有用。如需详细了解如何合并布局,请参阅通过 <include> 重复使用布局。
android:id 的值
对于 ID 值,通常使用 "@+id/name"
这种语法形式,如以下示例所示。加号 +
表示这是一个新的资源 ID,如果不存在,aapt
工具会在 R.java
类中创建一个新的资源整数。
<TextView android:id="@+id/nameTextbox"/>
nameTextbox
名称现在是附加到此元素的资源 ID。然后,您就可以在 Java 中引用与此 ID 关联的 TextView
:
Kotlin
val textView: TextView? = findViewById(R.id.nameTextbox)
Java
TextView textView = findViewById(R.id.nameTextbox);
此代码会返回 TextView
对象。
但是,如果您已经定义了一个 ID 资源并且尚未使用它,则可以通过去掉 android:id
值中的加号,将该 ID 应用到 View
元素。
android:layout_height 和 android:layout_width 的值
高度和宽度值使用 Android 支持的任意尺寸单位(px、dp、sp、pt、in、mm)或以下关键字来表示:
值 | 说明 |
match_parent |
将尺寸设为与父元素的尺寸一致。此项为 API 级别 8 中的新增配置,用于替代 fill_parent 。 |
wrap_content |
将尺寸设为适配此元素的内容所需的大小。 |
自定义视图元素
您可以创建自定义 View
和 ViewGroup
元素,并将它们应用到您的布局,就像应用标准布局元素一样。您还可以指定 XML 元素中支持的属性。如需了解详情,请参阅创建自定义视图组件。
- 示例:
- 保存在
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
的布局:
-
Kotlin
public override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.main_activity)
}
Java
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main_activity);
}
- 另请参阅:
-
本页面上的内容和代码示例受内容许可部分所述许可的限制。Java 和 OpenJDK 是 Oracle 和/或其关联公司的注册商标。
最后更新时间 (UTC):2024-09-20。
[{
"type": "thumb-down",
"id": "missingTheInformationINeed",
"label":"没有我需要的信息"
},{
"type": "thumb-down",
"id": "tooComplicatedTooManySteps",
"label":"太复杂/步骤太多"
},{
"type": "thumb-down",
"id": "outOfDate",
"label":"内容需要更新"
},{
"type": "thumb-down",
"id": "translationIssue",
"label":"翻译问题"
},{
"type": "thumb-down",
"id": "samplesCodeIssue",
"label":"示例/代码问题"
},{
"type": "thumb-down",
"id": "otherDown",
"label":"其他"
}]
[{
"type": "thumb-up",
"id": "easyToUnderstand",
"label":"易于理解"
},{
"type": "thumb-up",
"id": "solvedMyProblem",
"label":"解决了我的问题"
},{
"type": "thumb-up",
"id": "otherUp",
"label":"其他"
}]
{"lastModified": "\u6700\u540e\u66f4\u65b0\u65f6\u95f4 (UTC)\uff1a2024-09-20\u3002"}
[[["易于理解","easyToUnderstand","thumb-up"],["解决了我的问题","solvedMyProblem","thumb-up"],["其他","otherUp","thumb-up"]],[["没有我需要的信息","missingTheInformationINeed","thumb-down"],["太复杂/步骤太多","tooComplicatedTooManySteps","thumb-down"],["内容需要更新","outOfDate","thumb-down"],["翻译问题","translationIssue","thumb-down"],["示例/代码问题","samplesCodeIssue","thumb-down"],["其他","otherDown","thumb-down"]],["最后更新时间 (UTC):2024-09-20。"]]