《Android 应用开发基础教程》——第三章:布局管理与 UI 组件详解
目录
第三章:布局管理与 UI 组件详解(Java 版)
3.1 什么是布局(Layout)?
3.2 LinearLayout 示例
XML 布局(res/layout/activity_main.xml)
3.3 Java 代码绑定与事件处理
MainActivity.java
3.4 常用 UI 控件介绍
3.5 ConstraintLayout 简介(推荐布局)
简单示例:
3.6 布局参数说明
3.7 小结
习题答案
1. 使用 LinearLayout 的 XML 文件,包含两个按钮和一个输入框
解释:
2. 如何在 Java 中给按钮添加点击事件?
解释:
3. wrap_content 和 match_parent 的区别
示例:
4. ConstraintLayout 如何让控件居中显示?
示例 XML 文件:
解释:
第三章:布局管理与 UI 组件详解(Java 版)
3.1 什么是布局(Layout)?
在 Android 中,布局负责定义界面的组织结构和显示方式。一个布局文件以 XML 编写,描述了视图(View)之间的关系和排列方式。
布局常见的类型如下所示:
布局名 | 特点 |
---|---|
LinearLayout | 线性排列,横向或纵向 |
RelativeLayout | 相对位置排列 |
ConstraintLayout | 灵活、推荐使用的现代布局 |
FrameLayout | 层叠显示,一层覆盖一层 |
ScrollView | 提供可滚动的内容区域 |
3.2 LinearLayout 示例
一个垂直排列的页面,包含标题、输入框和按钮。
XML 布局(res/layout/activity_main.xml
)
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"android:layout_width="match_parent"android:layout_height="match_parent"android:orientation="vertical"android:padding="16dp"><TextViewandroid:id="@+id/textView"android:text="请输入姓名:"android:textSize="18sp"android:layout_width="wrap_content"android:layout_height="wrap_content" /><EditTextandroid:id="@+id/editText"android:hint="如:张三"android:layout_width="match_parent"android:layout_height="wrap_content" /><Buttonandroid:id="@+id/button"android:text="点击我"android:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_marginTop="16dp" />
</LinearLayout>
3.3 Java 代码绑定与事件处理
MainActivity.java
package com.example.myapp;import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;
import android.widget.Toast;
import androidx.appcompat.app.AppCompatActivity;public class MainActivity extends AppCompatActivity {private TextView textView;private EditText editText;private Button button;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);textView = findViewById(R.id.textView);editText = findViewById(R.id.editText);button = findViewById(R.id.button);button.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View v) {String name = editText.getText().toString();Toast.makeText(MainActivity.this, "你好," + name, Toast.LENGTH_SHORT).show();}});}
}
3.4 常用 UI 控件介绍
控件名 | 用途 |
---|---|
TextView | 显示文本 |
EditText | 输入文本 |
Button | 可点击按钮 |
ImageView | 显示图片 |
CheckBox | 复选框 |
RadioButton /RadioGroup | 单选按钮组 |
Spinner | 下拉菜单 |
ListView /RecyclerView | 列表显示数据 |
3.5 ConstraintLayout 简介(推荐布局)
ConstraintLayout 是推荐用于大部分复杂布局的控件。它支持对元素之间进行精确的对齐和限制。
简单示例:
<androidx.constraintlayout.widget.ConstraintLayoutxmlns:android="http://schemas.android.com/apk/res/android"xmlns:app="http://schemas.android.com/apk/res-auto"android:layout_width="match_parent"android:layout_height="match_parent"><Buttonandroid:id="@+id/button"android:text="居中按钮"android:layout_width="wrap_content"android:layout_height="wrap_content"app:layout_constraintTop_toTopOf="parent"app:layout_constraintBottom_toBottomOf="parent"app:layout_constraintStart_toStartOf="parent"app:layout_constraintEnd_toEndOf="parent"/>
</androidx.constraintlayout.widget.ConstraintLayout>
使用 ConstraintLayout 可以避免嵌套太多层
LinearLayout
,提高性能。
3.6 布局参数说明
属性名 | 含义 |
---|---|
layout_width / layout_height | 控件宽高(match_parent 、wrap_content 、数值如100dp ) |
padding / margin | 内边距 / 外边距 |
gravity | 内容对齐方式 |
orientation | LinearLayout 排列方向(horizontal / vertical) |
textSize / textColor | 文本大小 / 颜色 |
id | 控件唯一标识,便于 Java 代码绑定 |
3.7 小结
-
布局文件使用 XML 编写,描述界面结构
-
LinearLayout
适用于简单排列,ConstraintLayout
推荐用于复杂界面 -
Java 代码中使用
findViewById()
获取控件并绑定事件 -
常用控件如
TextView
、EditText
、Button
是界面基础
📌 练习题
-
请写出一个使用 LinearLayout 的 XML 文件,包含两个按钮,一个输入框
-
如何在 Java 中给按钮添加点击事件?
-
wrap_content
和match_parent
的区别是什么? -
ConstraintLayout 如何让控件居中显示?
接下来我们将进入非常重要的一章:
✅ 第四章:Intent 与 Activity 跳转、页面传值
习题答案
1. 使用 LinearLayout
的 XML 文件,包含两个按钮和一个输入框
下面是一个示例的 XML 文件,使用 LinearLayout
布局,包含两个按钮和一个输入框:
<?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"android:padding="16dp"><!-- 输入框 --><EditTextandroid:id="@+id/editText"android:layout_width="match_parent"android:layout_height="wrap_content"android:hint="请输入内容" /><!-- 按钮 1 --><Buttonandroid:id="@+id/button1"android:layout_width="match_parent"android:layout_height="wrap_content"android:text="按钮 1"android:layout_marginTop="8dp" /><!-- 按钮 2 --><Buttonandroid:id="@+id/button2"android:layout_width="match_parent"android:layout_height="wrap_content"android:text="按钮 2"android:layout_marginTop="8dp" /></LinearLayout>
解释:
LinearLayout
使用垂直方向(android:orientation="vertical"
)排列子控件。EditText
是输入框,宽度为match_parent
,高度为wrap_content
。- 两个
Button
分别占满父布局的宽度,高度根据内容包裹。
2. 如何在 Java 中给按钮添加点击事件?
在 Java 中,我们可以通过设置 OnClickListener
给按钮添加点击事件。以下是代码示例:
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Toast;
import androidx.appcompat.app.AppCompatActivity;public class MainActivity extends AppCompatActivity {@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);// 获取控件实例Button button1 = findViewById(R.id.button1);Button button2 = findViewById(R.id.button2);EditText editText = findViewById(R.id.editText);// 为按钮 1 设置点击事件button1.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View v) {String inputText = editText.getText().toString();Toast.makeText(MainActivity.this, "按钮 1 被点击,输入内容:" + inputText, Toast.LENGTH_SHORT).show();}});// 为按钮 2 设置点击事件button2.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View v) {Toast.makeText(MainActivity.this, "按钮 2 被点击", Toast.LENGTH_SHORT).show();}});}
}
解释:
- 使用
findViewById()
获取按钮和输入框的引用。 - 使用
setOnClickListener()
方法为按钮设置点击事件。 - 在点击事件中,可以获取输入框的内容或执行其他操作。
3. wrap_content
和 match_parent
的区别
属性 | 含义 |
---|---|
wrap_content | 控件的大小会根据其内容自动调整,仅包裹住内容所需的最小空间。 |
match_parent | 控件的大小会扩展以填满其父容器的可用空间(与父容器大小一致)。 |
示例:
- 如果一个
TextView
的宽度设置为wrap_content
,它的宽度会刚好容纳文本内容。 - 如果宽度设置为
match_parent
,它会填满父布局的宽度。
4. ConstraintLayout
如何让控件居中显示?
在 ConstraintLayout
中,我们可以通过约束条件让控件居中显示呀。以下是实现方法:
示例 XML 文件:
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"android:layout_width="match_parent"android:layout_height="match_parent"><!-- 居中的按钮 --><Buttonandroid:id="@+id/centerButton"android:layout_width="wrap_content"android:layout_height="wrap_content"android:text="居中按钮"app:layout_constraintTop_toTopOf="parent"app:layout_constraintBottom_toBottomOf="parent"app:layout_constraintLeft_toLeftOf="parent"app:layout_constraintRight_toRightOf="parent" /></androidx.constraintlayout.widget.ConstraintLayout>
解释:
app:layout_constraintTop_toTopOf="parent"
:将控件的顶部与父布局的顶部对齐。app:layout_constraintBottom_toBottomOf="parent"
:将控件的底部与父布局的底部对齐。app:layout_constraintLeft_toLeftOf="parent"
:将控件的左侧与父布局的左侧对齐。app:layout_constraintRight_toRightOf="parent"
:将控件的右侧与父布局的右侧对齐。
通过同时设置上下左右的约束条件,控件会在父布局中水平和垂直居中。