布局资源
使用收藏整理内容 根据您的偏好保存和分类内容。
布局资源定义 Activity
或 UI 组件中 UI 的架构。
- 文件位置
res/layout/文件名.xml
文件名用作资源 ID。
- 编译后的资源数据类型
- 指向
View
(或子类) 资源的资源指针
- 资源引用
- 在 Java 中:
R.layout.文件名
在 XML 中:@[包:]layout/文件名
- 语法
-
<?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>
元素,但只能有一个根元素,并且必须包含 xmlns:android
属性,其中包含如上语法示例中所示的 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>
- 一个单独的 UI 组件,通常称为小部件。各种
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
:一种轻量级视图,在您明确将其膨胀之前不占用任何布局空间。膨胀时,它将包含由其 android:layout
属性定义的布局文件。有关使用 ViewStub
的更多信息,请阅读 按需加载视图。
<merge>
- 一个备用的根元素,不会在布局层次结构中绘制。将此用作根元素在您知道此布局被放置到已经包含适合容纳
<merge>
元素子级的父 View
的布局中时非常有用。
这在您计划使用 <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 和/或其关联公司的商标或注册商标。
上次更新时间 2024-01-03 UTC。
[{ "type": "thumb-down", "id": "missingTheInformationINeed", "label":"缺少我需要的信息" },{ "type": "thumb-down", "id": "tooComplicatedTooManySteps", "label":"太复杂/步骤太多" },{ "type": "thumb-down", "id": "outOfDate", "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": "上次更新时间 2024-01-03 UTC.", "confidential": False }