第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中所有组件都提供了两种方式来控制组件的运行:
- 在XML布局文件(即前面说的layout文件)中通过XML属性进行控制。
- 在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
- top将对象放在其容器的顶部,不改变其大小.
- bottom将对象放在其容器的底部,不改变其大小.
- left 将对象放在其容器的左侧,不改变其大小.
- 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应用的界面编程
🌈个人主页:小新_- 🎈个人座右铭:“成功者不是从不失败的人,而是从不放弃的人!”🎈 🎁欢迎各位→点赞👍 收藏⭐️ 留言📝 🏆所属专栏࿱…...
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 是一款功能强大的工具,能够将 CAD 文件转换为多种格式,如 PDF、TIFF、JPEG、BMP、WMF、PNG、DXF、BMP、CGM、HPGL、SVG、PS 和 SWF 等。其支持的源格式丰富多样,包括 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)
第三届电力系统与能源技术国际学术会议(ICPSET 2024)将于2024年7月5-7日在杭州举办。由浙江水利水电学院电机产业学院主办,AEIC学术交流中心承办,湖州市南浔创新研究院、南浔区科技局(科协)协办 。会议主要…...
【机器学习300问】118、循环神经网络(RNN)的基本结构是怎样的?
将讲解循环神经网络RNN之前,我先抛出几个疑问:为什么发明循环神经网络?它的出现背景是怎样的?这些问题可以帮助我们更好的去理解RNN。下面我来逐一解答。 一、循环神经网络诞生的背景 循环神经网络(RNN)的…...
loveqq-framework 和 thymeleaf 整合遇到的 th:field 的坑,原来只有 spring 下才有效
相信大家在使用 thymeleaf 的时候,绝大部分都是和 springboot 一块儿使用的,所以 th:field 属性用的很舒服。 但实际上,th:field 只有在 spring 环境下下有用,单独的 thymeleaf 是不支持的! 为什么我知道呢ÿ…...
hugging face:大模型时代的github介绍
1. Hugging Face是什么: Hugging Face大模型时代的“github”,很多人有个这样的认知,但是我觉得不完全准确,他们相似的地方在于资源丰富,github有各种各样的软件代码和示例,但是它不是系统的,没…...
如何快速绘制logistic回归预测模型的ROC曲线?
临床预测模型,也是临床统计分析的一个大类,除了前期构建模型,还要对模型的预测能力、区分度、校准度、临床获益等方面展开评价,确保模型是有效的! 其中评价模型的好坏主要方面还是要看区分度和校准度,而区分…...
实现具有多个实现类的接口并为每个实现类定义一个名字的方法
在Java中,实现具有多个实现类的接口并为每个实现类定义一个名字的方法,可以通过使用工厂模式或服务定位器模式来完成。以下是使用工厂模式的一个示例: 定义接口和实现类 首先,定义一个接口和多个实现类: // 接口 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中是常见的任务,以下是一些常…...
如何在 Ubuntu 14.04 上使用 Iptables 实现基本防火墙模板
前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到网站。 简介 实施防火墙是保护服务器的重要步骤。其中很大一部分是决定强制执行对网络流量的限制的个别规则和策略。像 iptables 这样的防火墙…...
jasypt对yml文件进行加密解密
目录 0.背景 1.依赖 2.yml文件 3.加密操作 0.背景 在日常开发中,我们一般会把账号密码以及一些用到的各种第三方服务的Access_Key都放入yml文件中,这时就有必要对yml文件进行加密处理了, jasypt是一款简单的对yml加密的工具 1.依赖 &l…...
vue3-openlayers 使用tianditu,wmts和xyz等source加载天地图切片服务
本篇介绍一下使用vue3-openlayers加载天地图切片,三种方法: 使用tianditu(ol-source-tianditu内部实现其实用的wmts)使用wmts(ol-source-wmts)使用xyz(ol-source-xyz) 1 需求 vue…...
npm、yarn、pnpm 最新国内镜像源设置和常见问题解决
1. npm 设置国内镜像源 1.1 镜像源概述 镜像源是软件包管理工具用来下载和安装软件包的服务器地址。由于网络原因,直接使用官方源可能会导致速度慢或连接失败的问题。国内镜像源可以提供更快的访问速度和更稳定的连接。 1.2 镜像源的选择 国内有许多可用的npm镜…...
Qt Object:智能即时聊天室项目
目录 1.项目介绍 2.设计思路 3.Pro文件配置 4.项目演示 5.项目开源 项目介绍 智能即时聊天室系统(AIChatProject)是一个高效、灵活的即时通讯解决方案。它融合了百度的开源大型语言模型——文心一言,通过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+调试文档+讲解等)
💗博主介绍:✌全网粉丝10W,CSDN作者、博客专家、全栈领域优质创作者,博客之星、平台优质作者、专注于Java、小程序技术领域和毕业项目实战✌💗 🌟文末获取源码数据库🌟 感兴趣的可以先收藏起来,…...
阅读笔记——《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.(CCF A类会议)【注】本文仅为作者个人学习笔记&a…...
C#委托:事件驱动编程的基石
目录 了解委托 委托使用的基本步骤 声明委托(定义一个函数的原型:返回值 参数类型和个数) 根据委托定义的函数原型编写需要的方法 创建委托对象,关联“具体方法” 通过委托调用方法,而不是直接使用方法 委托对象所关联的方…...
Lombok 的 @Data 注解失效,未生成 getter/setter 方法引发的HTTP 406 错误
HTTP 状态码 406 (Not Acceptable) 和 500 (Internal Server Error) 是两类完全不同的错误,它们的含义、原因和解决方法都有显著区别。以下是详细对比: 1. HTTP 406 (Not Acceptable) 含义: 客户端请求的内容类型与服务器支持的内容类型不匹…...
51c自动驾驶~合集58
我自己的原文哦~ https://blog.51cto.com/whaosoft/13967107 #CCA-Attention 全局池化局部保留,CCA-Attention为LLM长文本建模带来突破性进展 琶洲实验室、华南理工大学联合推出关键上下文感知注意力机制(CCA-Attention),…...
使用分级同态加密防御梯度泄漏
抽象 联邦学习 (FL) 支持跨分布式客户端进行协作模型训练,而无需共享原始数据,这使其成为在互联和自动驾驶汽车 (CAV) 等领域保护隐私的机器学习的一种很有前途的方法。然而,最近的研究表明&…...
Qwen3-Embedding-0.6B深度解析:多语言语义检索的轻量级利器
第一章 引言:语义表示的新时代挑战与Qwen3的破局之路 1.1 文本嵌入的核心价值与技术演进 在人工智能领域,文本嵌入技术如同连接自然语言与机器理解的“神经突触”——它将人类语言转化为计算机可计算的语义向量,支撑着搜索引擎、推荐系统、…...
css的定位(position)详解:相对定位 绝对定位 固定定位
在 CSS 中,元素的定位通过 position 属性控制,共有 5 种定位模式:static(静态定位)、relative(相对定位)、absolute(绝对定位)、fixed(固定定位)和…...
前端开发面试题总结-JavaScript篇(一)
文章目录 JavaScript高频问答一、作用域与闭包1.什么是闭包(Closure)?闭包有什么应用场景和潜在问题?2.解释 JavaScript 的作用域链(Scope Chain) 二、原型与继承3.原型链是什么?如何实现继承&a…...
项目部署到Linux上时遇到的错误(Redis,MySQL,无法正确连接,地址占用问题)
Redis无法正确连接 在运行jar包时出现了这样的错误 查询得知问题核心在于Redis连接失败,具体原因是客户端发送了密码认证请求,但Redis服务器未设置密码 1.为Redis设置密码(匹配客户端配置) 步骤: 1).修…...
代理篇12|深入理解 Vite中的Proxy接口代理配置
在前端开发中,常常会遇到 跨域请求接口 的情况。为了解决这个问题,Vite 和 Webpack 都提供了 proxy 代理功能,用于将本地开发请求转发到后端服务器。 什么是代理(proxy)? 代理是在开发过程中,前端项目通过开发服务器,将指定的请求“转发”到真实的后端服务器,从而绕…...
代码规范和架构【立芯理论一】(2025.06.08)
1、代码规范的目标 代码简洁精炼、美观,可持续性好高效率高复用,可移植性好高内聚,低耦合没有冗余规范性,代码有规可循,可以看出自己当时的思考过程特殊排版,特殊语法,特殊指令,必须…...
解决:Android studio 编译后报错\app\src\main\cpp\CMakeLists.txt‘ to exist
现象: android studio报错: [CXX1409] D:\GitLab\xxxxx\app.cxx\Debug\3f3w4y1i\arm64-v8a\android_gradle_build.json : expected buildFiles file ‘D:\GitLab\xxxxx\app\src\main\cpp\CMakeLists.txt’ to exist 解决: 不要动CMakeLists.…...
