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

第2章 Android应用的界面编程

   🌈个人主页:小新_-

🎈个人座右铭:“成功者不是从不失败的人,而是从不放弃的人!”🎈

🎁欢迎各位→点赞👍 + 收藏⭐️ + 留言📝

🏆所属专栏: Android移动开发欢迎订阅,持续更新中~~~

                      

         ✨让小新带着你快乐的学习吧~✨

目录

一、界面编程和视图(了解)

1、视图组件和容器组件

2、使用XML布局文件控制UI界面

3、在代码中控制UI界面

4、自定义UI组件

二、几组重要的UI组件(掌握)

(1)TextView(重点)

补充

(2)EditText

(3)Button(重点)

(4)RadioButton

(5)CheckBox

(6)ListView

(7)ImageView

三、布局管理器(掌握)

1、什么是布局管理器

2、常见布局管理器

(1)LinearLayout(重点)

(2)RelativeLayout(重点)

(3)FrameLayout

(4)TableLayout

(5)GridLayout

(6)AbsoluteLayout


一、界面编程和视图(了解)

1、视图组件和容器组件

Android应用的绝大多数UI组件都是放在Android.widget包及其子包、Android.view包及其子包中。值得注意的是,Android中所有的组件都是继承了View类,View组件代表一个空白的矩形区域。View类还有一个重要的子类ViewGroup,但ViewGoup类经常作为其他组件的容器使用。 Android的所有UI组件都建立在View、ViewGroup基础之上,它们的组织结构如图所示。

Android讲究逻辑层和视图层分离,开发中一般不在Activity中直接编写界面,而是在布局文件中编写。Android中所有组件都提供了两种方式来控制组件的运行:

  1. 在XML布局文件(即前面说的layout文件)中通过XML属性进行控制。
  2. 在Java代码(一般是指Activity)中通过调用方法进行控制。

2、使用XML布局文件控制UI界面

Android推荐使用这种方式来控制视图,因为这样不仅简单直接,而且将视图控制逻辑从Java代码中分离出来,单独在XML文件中控制,更好地体现了MVC原则。 在实际开发中,当遇到有很多UI组件时(实际上这种情况很常见),各个组件会通过android:id属性给每个组件设置一个唯一的标识。当需要在代码中访问指定的组件时(例如设置单击事件),就可以通过id值,利用方法       findViewById(R.id.id值)来访问。

在设置UI组件时有两个属性值最常用:android:layout_height、android:layout_width,这两个属性支持两种属性值:

(1)match_parent:指定子组件的高度和宽度与父组件的高度和宽度相同(实际还有填充的空白距离)。

(2)wrap_content:指定组件的大小恰好能包裹它的内容。

Android机制决定了UI组件的大小不仅受它实际宽度和高度的控制,还受它所在布局的高度和宽度控制,所以在设置组件的宽高时还要考虑布局的宽高。虽然Android中推荐使用XML方式来控制UI界面,但是有时碰到一些特殊情况,例如只需要一个组件时,在代码中采用new的方式比较合适。

下面来看一个完全由代码控制的UI界面的简单应用

3、在代码中控制UI界面

上面代码的中使用的三个组件LinearLayout、textView、button都是使用关键字new创建的,setContentView()方法加载new 出来的LinearLayout作为布局“容器”,再通过LinearLayout类的addView()方法把TextView和Button添加进“容器”,这样就组成如图所示界面。

可以看出每new一个组件都会传入一个this参数,这是由于创建UI组件时需要传入一个Context类型的参数,Context代表访问Android应用环境的全局信息的API。让UI组件持有一个Context参数,可以让这些UI组件通过该参数来获取Android应用环境的全局信息。

Context本身是一个抽象类,Android应用中的Activity和Service都继承了Context,因此Activity和Service都可直接作为Context使用。 从上述代码可以看出,完全在代码中控制UI界面不仅需要调用方法来设置UI组件的行为,而且还不利于高层的耦合,因此代码也显得十分臃肿。

而利用XML方式控制UI界面时,开发者只需要在XML布局文件中使用标签即可创建UI组件,而且只要使用属性值就可以控制UI组件的行为。

4、自定义UI组件

自定义UI组件创建时需要定义一个继承View类的子类,然后重写View类的一个或多个方法。通常需要被重写的方法如表所示

自定义组件完成之后,需要在Java代码中把该组件添加到容器中才可以看到想要的效果,代码如下: BallViewActivity.java文件

用XML布局文件的方式使用更简单,只需要在XML布局文件中直接引用即可,具体代码如下:

因为已经在XML布局文件中添加了自定义组件,所以BallViewActivity中的代码可以简化成如下:

显然,这种方式比在代码中控制界面要更方便。

二、几组重要的UI组件(掌握)

(1)TextView(重点)

最开始,我们有三个任务

第一个,我们来回顾新建一个项目

第二个,为TextView新建一个XML文件

完成后,如图所示xml文件

第三个,为XML文件新建一个java代码

第四部,注册

然后,我们就可以进入我们对于的java文件中运行我们的代码了

使用

补充

有关Android尺寸问题

(2)EditText

使用

(3)Button(重点)

由于涉及监听事件,后面讲解。其他属性继承于TextView

(4)RadioButton

概念:单选按钮就是一组按钮中只能选择一个,所以我们需要把RadioButton放到RadioGroup按钮组当中去,从而实现单选功能

使用

(5)CheckBox

概念:复选按钮即可以选择多个按钮,CheckBox是Button的子类,支持使用Button的所有属性

使用:

(6)ListView

现在value中的string中存入string值

然后引用

(7)ImageView

首先我们学习添加图片

使用

三、布局管理器(掌握)

1、什么是布局管理器

布局是一种可用于放置很多控件的容器,它可以按照一定的规律调整内部控件的位置,从而编写出精美的界面。当然,布局的内部除了放置控件外,也可以放置布局,通过多层布局的嵌套,就能够实现一些比较复杂的界面。布局和控件的关系如图所示

为了更好地管理界面中的组件,Android提供了布局管理器,通过布局管理器,Android应用的图形用户界面具备了良好的平台无关性。这就让各个控件可以有条不紊地摆放在界面上,从而极大地提升用户体验。

本节将为大家介绍LinearLayout(线性布局)、FrameLayout(帧布局)、RelativeLayout(相对布局)、AbsoluteLayout(绝对布局)、TableLayout(表格布局)、GridLayout(网格布局)六大基本布局以及它们常用的属性,并且结合不同布局的各自特点给出自身特有的属性(重复的属性不会列出)。

2、常见布局管理器

(1)LinearLayout(重点)

概念:Linear意为线性的,线型的。所以,该布局要么是横向的,要么是竖向的

常用属性

使用

编写这段代码,我们设计三个按钮,使用垂直方向,在design可以看到我们的代码实现的样子

(2)RelativeLayout(重点)

使用

使用

(3)FrameLayout

概念:帧布局,名字虽然听起来高大上,但具体说来其实就是从父容器的左上角开始绘制,后面的组件叠放在之前的组件上面,后续添加的控件会覆盖前一个。如图所示:

使用

*通常不使用FrameLayout**显示多项内容,因为它的布局很难调节
常用属性
layout_gravity

  1. top将对象放在其容器的顶部,不改变其大小.
  2. bottom将对象放在其容器的底部,不改变其大小.
  3. left 将对象放在其容器的左侧,不改变其大小.
  4. right将对象放在其容器的右侧,不改变其大小.

使用

(4)TableLayout

概念 表格布局是以行数和列数来确定位置进行排列,可用于制作表

其中TableRow为其子控件
使用

<?xml version="1.0" encoding="utf-8"?>
<TableLayout xmlns:android="http://schemas.android.com/apk/res/android"android:layout_width="match_parent"android:layout_height="match_parent">
<TableRow><Buttonandroid:layout_height="wrap_content"android:layout_width="wrap_content"android:text="1"></Button><Buttonandroid:layout_height="wrap_content"android:layout_width="wrap_content"android:text="2"></Button>
</TableRow><TableRow><Buttonandroid:layout_height="wrap_content"android:layout_width="wrap_content"android:text="3"></Button><Buttonandroid:layout_height="wrap_content"android:layout_width="wrap_content"android:text="4"></Button></TableRow>
</TableLayout>

常用属性

  • collapseColumns(隐藏某一列,下标从0开始)
  • stretchColumns(拉伸某一列,下标从0开始)
  • shrinkColumns(收缩某一列,下标从0开始)

<TableRow><Buttonandroid:layout_height="wrap_content"android:layout_width="wrap_content"android:text="5"android:layout_span="2"></Button></TableRow>

 <TableRow><Buttonandroid:layout_height="wrap_content"android:layout_width="wrap_content"android:text="6"></Button><Buttonandroid:layout_height="wrap_content"android:layout_width="wrap_content"android:layout_column="3"android:text="7"></Button></TableRow>

(5)GridLayout

使用

(6)AbsoluteLayout

使用

 

最后,感谢大家的观看~~

相关文章:

第2章 Android应用的界面编程

&#x1f308;个人主页&#xff1a;小新_- &#x1f388;个人座右铭&#xff1a;“成功者不是从不失败的人&#xff0c;而是从不放弃的人&#xff01;”&#x1f388; &#x1f381;欢迎各位→点赞&#x1f44d; 收藏⭐️ 留言&#x1f4dd; &#x1f3c6;所属专栏&#xff1…...

springboot学习-图灵课堂-最详细学习

springboot-repeat springBoot学习代码说明为什么java -jar springJar包后项目就可以启动 配置文件介绍 springBoot学习 依赖引入 <properties><project.build.sourceEncoding>UTF-8</project.build.sourceEncoding><maven.compiler.target>8</mav…...

Total CAD Converter与Total Excel Converter软件分享

1.软件介绍 Total CAD Converter Total CAD Converter 是一款功能强大的工具&#xff0c;能够将 CAD 文件转换为多种格式&#xff0c;如 PDF、TIFF、JPEG、BMP、WMF、PNG、DXF、BMP、CGM、HPGL、SVG、PS 和 SWF 等。其支持的源格式丰富多样&#xff0c;包括 dxf、dwg、dwf、d…...

【2024最新华为OD-C/D卷试题汇总】[支持在线评测] 启动多任务排序(200分) - 三语言AC题解(Python/Java/Cpp)

🍭 大家好这里是清隆学长 ,一枚热爱算法的程序员 ✨ 本系列打算持续跟新华为OD-C/D卷的三语言AC题解 💻 ACM银牌🥈| 多次AK大厂笔试 | 编程一对一辅导 👏 感谢大家的订阅➕ 和 喜欢💗 📎在线评测链接 启动多任务排序(200分) 🌍 评测功能需要订阅专栏后私信联系…...

【会议征稿,JPCS出版】第三届电力系统与能源技术国际学术会议(ICPSET 2024,7月5-7)

第三届电力系统与能源技术国际学术会议&#xff08;ICPSET 2024&#xff09;将于2024年7月5-7日在杭州举办。由浙江水利水电学院电机产业学院主办&#xff0c;AEIC学术交流中心承办&#xff0c;湖州市南浔创新研究院、南浔区科技局&#xff08;科协&#xff09;协办 。会议主要…...

【机器学习300问】118、循环神经网络(RNN)的基本结构是怎样的?

将讲解循环神经网络RNN之前&#xff0c;我先抛出几个疑问&#xff1a;为什么发明循环神经网络&#xff1f;它的出现背景是怎样的&#xff1f;这些问题可以帮助我们更好的去理解RNN。下面我来逐一解答。 一、循环神经网络诞生的背景 循环神经网络&#xff08;RNN&#xff09;的…...

loveqq-framework 和 thymeleaf 整合遇到的 th:field 的坑,原来只有 spring 下才有效

相信大家在使用 thymeleaf 的时候&#xff0c;绝大部分都是和 springboot 一块儿使用的&#xff0c;所以 th:field 属性用的很舒服。 但实际上&#xff0c;th:field 只有在 spring 环境下下有用&#xff0c;单独的 thymeleaf 是不支持的&#xff01; 为什么我知道呢&#xff…...

hugging face:大模型时代的github介绍

1. Hugging Face是什么&#xff1a; Hugging Face大模型时代的“github”&#xff0c;很多人有个这样的认知&#xff0c;但是我觉得不完全准确&#xff0c;他们相似的地方在于资源丰富&#xff0c;github有各种各样的软件代码和示例&#xff0c;但是它不是系统的&#xff0c;没…...

如何快速绘制logistic回归预测模型的ROC曲线?

临床预测模型&#xff0c;也是临床统计分析的一个大类&#xff0c;除了前期构建模型&#xff0c;还要对模型的预测能力、区分度、校准度、临床获益等方面展开评价&#xff0c;确保模型是有效的&#xff01; 其中评价模型的好坏主要方面还是要看区分度和校准度&#xff0c;而区分…...

实现具有多个实现类的接口并为每个实现类定义一个名字的方法

在Java中&#xff0c;实现具有多个实现类的接口并为每个实现类定义一个名字的方法&#xff0c;可以通过使用工厂模式或服务定位器模式来完成。以下是使用工厂模式的一个示例&#xff1a; 定义接口和实现类 首先&#xff0c;定义一个接口和多个实现类&#xff1a; // 接口 publ…...

Linux解压缩命令

文章目录 前言1. tar - 打包和压缩文件2. gzip - 压缩文件3. gunzip - 解压缩gzip文件4. bzip2 - 压缩文件5. unzip - 解压缩zip文件6. zip - 压缩文件为zip格式7. 7z - 7-Zip压缩工具8. unrar - 解压缩RAR文件 前言 解压缩文件在Linux中是常见的任务&#xff0c;以下是一些常…...

如何在 Ubuntu 14.04 上使用 Iptables 实现基本防火墙模板

前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。点击跳转到网站。 简介 实施防火墙是保护服务器的重要步骤。其中很大一部分是决定强制执行对网络流量的限制的个别规则和策略。像 iptables 这样的防火墙…...

jasypt对yml文件进行加密解密

目录 0.背景 1.依赖 2.yml文件 3.加密操作 0.背景 在日常开发中&#xff0c;我们一般会把账号密码以及一些用到的各种第三方服务的Access_Key都放入yml文件中&#xff0c;这时就有必要对yml文件进行加密处理了&#xff0c; jasypt是一款简单的对yml加密的工具 1.依赖 &l…...

vue3-openlayers 使用tianditu,wmts和xyz等source加载天地图切片服务

本篇介绍一下使用vue3-openlayers加载天地图切片&#xff0c;三种方法&#xff1a; 使用tianditu&#xff08;ol-source-tianditu内部实现其实用的wmts&#xff09;使用wmts&#xff08;ol-source-wmts&#xff09;使用xyz&#xff08;ol-source-xyz&#xff09; 1 需求 vue…...

npm、yarn、pnpm 最新国内镜像源设置和常见问题解决

1. npm 设置国内镜像源 1.1 镜像源概述 镜像源是软件包管理工具用来下载和安装软件包的服务器地址。由于网络原因&#xff0c;直接使用官方源可能会导致速度慢或连接失败的问题。国内镜像源可以提供更快的访问速度和更稳定的连接。 1.2 镜像源的选择 国内有许多可用的npm镜…...

Qt Object:智能即时聊天室项目

目录 1.项目介绍 2.设计思路 3.Pro文件配置 4.项目演示 5.项目开源 项目介绍 智能即时聊天室系统&#xff08;AIChatProject&#xff09;是一个高效、灵活的即时通讯解决方案。它融合了百度的开源大型语言模型——文心一言&#xff0c;通过API接口实现深度集成。系统专为聊天和…...

php,python aes加密反解

1. python版本 import base64 from Crypto.Cipher import AES from Crypto.Util.Padding import pad, unpadclass AESUtilCBC:def __init__(self, key, iv):self.key key.encode(utf-8)self.iv iv.encode(utf-8)self.pad_length AES.block_sizedef encrypt(self, data):try…...

基于Java学生选课管理系统设计和实现(源码+LW+调试文档+讲解等)

&#x1f497;博主介绍&#xff1a;✌全网粉丝10W,CSDN作者、博客专家、全栈领域优质创作者&#xff0c;博客之星、平台优质作者、专注于Java、小程序技术领域和毕业项目实战✌&#x1f497; &#x1f31f;文末获取源码数据库&#x1f31f; 感兴趣的可以先收藏起来&#xff0c;…...

阅读笔记——《Large Language Model guided Protocol Fuzzing》

【参考文献】Meng R, Mirchev M, Bhme M, et al. Large language model guided protocol fuzzing[C]//Proceedings of the 31st Annual Network and Distributed System Security Symposium (NDSS). 2024.&#xff08;CCF A类会议&#xff09;【注】本文仅为作者个人学习笔记&a…...

C#委托:事件驱动编程的基石

目录 了解委托 委托使用的基本步骤 声明委托(定义一个函数的原型&#xff1a;返回值 参数类型和个数&#xff09; 根据委托定义的函数原型编写需要的方法 创建委托对象&#xff0c;关联“具体方法” 通过委托调用方法&#xff0c;而不是直接使用方法 委托对象所关联的方…...

【力扣数据库知识手册笔记】索引

索引 索引的优缺点 优点1. 通过创建唯一性索引&#xff0c;可以保证数据库表中每一行数据的唯一性。2. 可以加快数据的检索速度&#xff08;创建索引的主要原因&#xff09;。3. 可以加速表和表之间的连接&#xff0c;实现数据的参考完整性。4. 可以在查询过程中&#xff0c;…...

【大模型RAG】Docker 一键部署 Milvus 完整攻略

本文概要 Milvus 2.5 Stand-alone 版可通过 Docker 在几分钟内完成安装&#xff1b;只需暴露 19530&#xff08;gRPC&#xff09;与 9091&#xff08;HTTP/WebUI&#xff09;两个端口&#xff0c;即可让本地电脑通过 PyMilvus 或浏览器访问远程 Linux 服务器上的 Milvus。下面…...

从零实现STL哈希容器:unordered_map/unordered_set封装详解

本篇文章是对C学习的STL哈希容器自主实现部分的学习分享 希望也能为你带来些帮助~ 那咱们废话不多说&#xff0c;直接开始吧&#xff01; 一、源码结构分析 1. SGISTL30实现剖析 // hash_set核心结构 template <class Value, class HashFcn, ...> class hash_set {ty…...

leetcodeSQL解题:3564. 季节性销售分析

leetcodeSQL解题&#xff1a;3564. 季节性销售分析 题目&#xff1a; 表&#xff1a;sales ---------------------- | Column Name | Type | ---------------------- | sale_id | int | | product_id | int | | sale_date | date | | quantity | int | | price | decimal | -…...

C# SqlSugar:依赖注入与仓储模式实践

C# SqlSugar&#xff1a;依赖注入与仓储模式实践 在 C# 的应用开发中&#xff0c;数据库操作是必不可少的环节。为了让数据访问层更加简洁、高效且易于维护&#xff0c;许多开发者会选择成熟的 ORM&#xff08;对象关系映射&#xff09;框架&#xff0c;SqlSugar 就是其中备受…...

selenium学习实战【Python爬虫】

selenium学习实战【Python爬虫】 文章目录 selenium学习实战【Python爬虫】一、声明二、学习目标三、安装依赖3.1 安装selenium库3.2 安装浏览器驱动3.2.1 查看Edge版本3.2.2 驱动安装 四、代码讲解4.1 配置浏览器4.2 加载更多4.3 寻找内容4.4 完整代码 五、报告文件爬取5.1 提…...

使用Matplotlib创建炫酷的3D散点图:数据可视化的新维度

文章目录 基础实现代码代码解析进阶技巧1. 自定义点的大小和颜色2. 添加图例和样式美化3. 真实数据应用示例实用技巧与注意事项完整示例(带样式)应用场景在数据科学和可视化领域,三维图形能为我们提供更丰富的数据洞察。本文将手把手教你如何使用Python的Matplotlib库创建引…...

9-Oracle 23 ai Vector Search 特性 知识准备

很多小伙伴是不是参加了 免费认证课程&#xff08;限时至2025/5/15&#xff09; Oracle AI Vector Search 1Z0-184-25考试&#xff0c;都顺利拿到certified了没。 各行各业的AI 大模型的到来&#xff0c;传统的数据库中的SQL还能不能打&#xff0c;结构化和非结构的话数据如何和…...

DeepSeek源码深度解析 × 华为仓颉语言编程精粹——从MoE架构到全场景开发生态

前言 在人工智能技术飞速发展的今天&#xff0c;深度学习与大模型技术已成为推动行业变革的核心驱动力&#xff0c;而高效、灵活的开发工具与编程语言则为技术创新提供了重要支撑。本书以两大前沿技术领域为核心&#xff0c;系统性地呈现了两部深度技术著作的精华&#xff1a;…...

Elastic 获得 AWS 教育 ISV 合作伙伴资质,进一步增强教育解决方案产品组合

作者&#xff1a;来自 Elastic Udayasimha Theepireddy (Uday), Brian Bergholm, Marianna Jonsdottir 通过搜索 AI 和云创新推动教育领域的数字化转型。 我们非常高兴地宣布&#xff0c;Elastic 已获得 AWS 教育 ISV 合作伙伴资质。这一重要认证表明&#xff0c;Elastic 作为 …...