当前位置: 首页 > news >正文

《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_parentwrap_content、数值如100dp
padding / margin内边距 / 外边距
gravity内容对齐方式
orientationLinearLayout 排列方向(horizontal / vertical)
textSize / textColor文本大小 / 颜色
id控件唯一标识,便于 Java 代码绑定

3.7 小结

  • 布局文件使用 XML 编写,描述界面结构

  • LinearLayout 适用于简单排列,ConstraintLayout 推荐用于复杂界面

  • Java 代码中使用 findViewById() 获取控件并绑定事件

  • 常用控件如 TextViewEditTextButton 是界面基础


📌 练习题

  1. 请写出一个使用 LinearLayout 的 XML 文件,包含两个按钮,一个输入框

  2. 如何在 Java 中给按钮添加点击事件?

  3. wrap_contentmatch_parent 的区别是什么?

  4. 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":将控件的右侧与父布局的右侧对齐。

通过同时设置上下左右的约束条件,控件会在父布局中水平和垂直居中。

相关文章:

  • 多模态大语言模型arxiv论文略读(三十一)
  • 机器学习 Day12 集成学习简单介绍
  • [Windows]_[VS2017]_[如何进行远程调试程序]
  • POSIX标准系统调用详解:从概念到实践
  • 破解吞咽困境!进行性核上性麻痹患者的科学饮食方案
  • 62页华为IPD-MM流程:市场调研理论与实践方案精读【附全文阅读】
  • Linux 网络基础(二) (传输协议层:UDP、TCP)
  • 【算法提高】单源最短路的建图方式
  • Linux系统编程---孤儿进程与僵尸进程
  • UML统一建模
  • Vue常用指令入门
  • 【项目实训个人博客】数据集搜集
  • 【python】尾部多写个逗号会把表达式变成 tuple
  • 使用virtualbox的HostOnly建立共享网络-实现虚拟机上网
  • 面向对象编程的四大特性详解:封装、继承、多态与抽象
  • React 自定义Hook之usePrevious
  • 数字孪生废气处理工艺流程
  • ES6 第一讲 变量定义 堆与栈 字符串的扩展和数值型的扩展
  • 【读书笔记·VLSI电路设计方法解密】问题64:什么是芯片的功耗分析
  • 【C++基本算法】背包问题——完全背包
  • 印度证实印巴已同意停火
  • 庆祝上海总工会成立100周年暨市模范集体劳动模范和先进工作者表彰大会举行,陈吉宁寄予这些期待
  • 国家主席习近平同普京总统举行大范围会谈
  • 中国驻美国大使馆发言人就中美经贸高层会谈答记者问
  • 九部门:对机动车特别是货车排放问题的监管将更加严格
  • 百济首次实现季度营业利润扭亏,泽布替尼销售额近57亿元