Android SDK 上手指南||第六章 用户交互
第六章 用户交互
在这篇教程中,我们将对之前所添加的Button元素进行设置以实现对用户点击的检测与响应。为了达成这一目标,我们需要在应用程序的主 Activity类中略微涉及Java编程内容。如果大家在Java开发方面的经验不太丰富也没必要担心,只要按步骤进行即可完成学习。我们将在本系列的 下一篇文章中深入探讨Java语法,从而保证大家了解初步Android开发任务中所必需的编程语言知识。
大家可以在Android当中以多种不同方式实现用户交互。我们将学习两种最为典型的处理方案,从而实现应用按钮对用户点击的感应——两种方案都会用到一点XML代码以及Java实施流程。Android当中包含几种不同的交互UI元素,足以感应来自用户的各类输入操作。输入操作的处理方式必须与 UI项相匹配,但整个过程仍然大体相同。我们将以一个按钮为起点开始探索Android平台上的用户交互,因为按钮无疑是最简单也最常用的界面元素。
1. 用户交互基础
在进一步探讨细节之前,我要首先为刚刚接触应用程序开发工作的朋友们解释几项UI概念。为了实现应用交互,我们需要利用特定元素检测用户的交互操 作。看过上一篇文章的朋友一定还记得,Android中存在View,而在今天的示例中具体是指Button。要实现交互,我们首先需要“监听”用户的操 作。虽然Android主要运行在搭载触控屏幕的移动设备上,但大家仍然可以在计算机上利用编程语言处理交互开发。举例来说,在后面提到“点击”的部分, 我们指的是利用鼠标点击或者用手指触摸/点触对应位置。
用户与应用程序的交互方式是多种多样的。他们可以点触、划动以及“长按”对应项目。当这些操作活动发生时,我们将其称为一个“事件”。因此,我们需 要通过设置让应用程序监听特定UI项目上是否发生了特定事件。在今天的示例中,我们需要监听针对Button的点击(或者点触/触摸)操作。
我们需要监听并响应这类用户事件。要做到这一点,我们将向Java Activity类中添加代码以实现对按钮点击的监听与响应。只要按钮上出现点击事件,这部分代码就会开始执行。虽然其它类型的用户交互会涉及不同的方法 代码以及多种多样的事件类型,但其基本过程都是相通的。
2. 识别UI元素
第一步
为了指明用户交互具体指向哪个View,我们需要在应用程序当中识别出每个交互性View。在文章列举的范例中,我们只讨论一个View——但大家 在今后实际进行应用开发时,可能会用到多种不同类型的交互性View。为了让它们彼此之间有条不紊地运作,我们需要为每个View设置一个用于识别的独特 ID属性,并将其应用于整个应用程序。首先在Eclipse中打开我们的主布局文件并切换到XML编辑标签。接下来找到我们为Button元素添加的代码,利用以下语法为其分配一个ID:
android:id="@+id/myButton"
我们需要为Android布局中所使用的每一个元素分配ID属性,从而帮助自己顺利识别每个View元素。请注意以上代码中的“@+id”语法。这 会提示Android工具在项目资源“R.java”文件中创建一个新ID,并为其指定一个在应用程序内独一无二的文本字符串,也就是 “myButton”。在应用中XML布局代码的其余部分乃至其它XML与Java文件内,我们将使用这一名称来指定Button View。而后保存当前布局文件。
第二步
打开应用程序中的主Activity文件。我们将向其中添加一点点Java代码,但大家不用为自己令人捉急的Java水平而担忧,只要理解其中与处 理用户交互相关的大致流程即可。如果各位朋友原先从未接触过Java,请继续关注我们的下一篇教程,到时候回头再看就会发现现在的内容其实非常简单。我们 要在Activity类中创建一个变量来引用Button View。在类声明开头、起始内容之后:
public class MainActivity extends Activity {
添加变量声明:
private Button theButton;
我们的声明包含视觉特性(下一次再详加说明)、变量类型以及变量名称。Eclipse可能会在“Button”文本部分加注下划线并提示 “Button不能被解析为一个类型”。由于我们使用的是由Android平台所提供的Button类型,所以必须将其导入至类文件当中。将鼠标悬停在 “Button”文本上方,Eclipse将为我们显示出一套建议列表。在其中选择“Import‘Button’(android.widget)”。 这样类文件顶部就会出现一个可以自由展开与收起的导入声明列表。

第三步
现在我们可以在布局当中取回指向Button View的引用,并将该引用保存在我们所创建的变量当中。在我的Activity onCreate方法中,紧接着以下代码行进行布局设置:
setContentView(R.layout.activity_main);
如下所示输入一行新代码以取回Button:
theButton = (Button)findViewById();
在“findViewById()”的括号中输入“R.”——Eclipse会为我们提供资源类型提示列表。在其中选择“id”。

上述代码会在按钮被点击后指定需要执行的方法名称。对应方法应该被添加到显示在布局中的Activity类当中。这样一来,我们就不必向Activity 类中加入大量代码,包括创建Button变量、在其中保存View引用、实施OnClickListener或者为该按钮设置一个专门的点击监听类。在本 次示例中,我们可以通过添加以下代码(使用同样的代码以实现一致的操作效果)来取代向类中添加onClick方法:
public void buttonClicked(View v){Button theButton = (Button)v;theButton.setText("Ouch");
}
尽管这种方法看起来似乎更简单,但它利用Java让引用指向布局元素的过程值得认真关注——大家在今后的应用程序开发过程中会经常用到。另外,如果大家的布局当中包含多个可点击项目,可能会更倾向于在同一个方法内处理所有点击事件——在这种情况下,文章前面提到的方案会更为理想。
除了文章中提到的两套方案,我们还可以通过其它多种途径实现View上的点击处理任务,但其它办法要更复杂一些,不太适合作为新手教学来使用。
第二步
在这篇教程中,我们了解了如何利用最基本的方式处理Android系统中的按钮点击事件。该平台还针对不同View类型提供一系列其它用户事件的处理能力,包括长按、按键以及触摸等等。感兴趣的朋友可以参阅Android开发者指南,从中了解自己在未来的项目开发工作中可能接触到的各类事件处理任务。
总结
在这一部分当中,我们探讨了如何遵循基本流程实现Android UI中对用户点击按钮的响应。今天涉及到的内容与整套Android用户交互机制相比只能算是九牛一毛,但大家应该能够从这种通用型方法中领会主干、从而指导自己在未来的项目中拿出符合用户输入习惯的开发成果。在本系列的其它教程中,我们将了解Java语言中最为本质的主要特性,从而在Android开发的学习当中取得一个又一个辉煌的胜利。
相关文章:
Android SDK 上手指南||第六章 用户交互
第六章 用户交互 在这篇教程中,我们将对之前所添加的Button元素进行设置以实现对用户点击的检测与响应。为了达成这一目标,我们需要在应用程序的主 Activity类中略微涉及Java编程内容。如果大家在Java开发方面的经验不太丰富也没必要担心,只…...
Vue3+Pinia+Koa+Three.js 全栈电商项目总结复盘
前言 前几天一个朋友去义乌旅游,带回来很多小商品,就是一整个物美价廉,但是为什么线下购物和网购有的时候差别这么大(网购经常要退换货啊😭😭😭),为此我萌生了一个想法&…...
【大模型AIGC系列课程 2-3】动手为ChatGPT打造第二大脑
文本向量的应用 one-hot 文本向量 !pip install jiebaimport jieba # 中文分词包text = 6月27日,世界经济论坛发布了《2023年10大新兴技术》报告。重点介绍了在未来3—5年对全球经济、工作、生活、医疗等产生积极影响的创新技术。其中,生成式AI首次入选并排名第2位。世界经…...
【ARM AMBA AXI 入门 10 - AXI 总线 DATA信号与 STRB 信号之间的关系 】
文章目录 AXI STRB 信号 AXI STRB 信号 AXI总线是ARM公司设计的高性能处理器接口,其中STRB和DATA信号在AXI协议中有特殊的含义和关系。 DATA信号:在AXI中,DATA信号用于在读写操作中传输实际的数据。数据的大小可以根据AXI接口的位宽来变化&…...
软引用的使用场景-链路日志
我司自研的链路系统中的agent层记录日志时,使用的是异步打印日志的机制。异步打印会使用队列,现将待打印的日志对象,记录在队列中。 但这块的日志,为了不影响业务,例如不能因为链路记录的日志过多,导致业务…...
【java】【项目实战】[外卖七]手机短信开发
目录 一、发送短信 1 短信服务介绍 2 阿里云短信服务(个人现在不太好申请了) 2.1 介绍 2.2 注册账号 2.3 设置短信签名 2.4 设置短信模版 2.5 设置AccessKey 3 代码开发 3.1 导包 3.2 短信发送工具类SMSUtils 二、手机验证码登录 1 需求分析 …...
Web 开发 Django 模板
上次为大家介绍了 Django 的模型和自带的管理工具,有了这个工具就可以全自动地根据模型创建后台管理界面,以供网站管理者更方便的管理网站数据。有了网站数据,那怎么样更方便又好看的展示给用户看呢?目前流行的 Web 框架基本都采用…...
动态可编辑表单项
遇到的问题:业务需要用户输入对应的username以发送私信给指定对象 方案1-input 输入就完事了 缺陷:要输入,麻烦 <form><label for"recipient-name">发给:</label><input type"text"…...
【Docker入门第一篇】
Docker简介 Docker 是一个开源的应用容器引擎,基于 Go 语言 并遵从 Apache2.0 协议开源。 Docker 可以让开发者打包他们的应用以及依赖包到一个轻量级、可移植的容器中,然后发布到任何流行的 Linux 机器上,也可以实现虚拟化。 容器是完全使…...
数据集收集列表(opencv,机器学习,深度学习)持续更新
opencv 车牌识别数据集 opencv 手写数字识别数据集 机器学习 印第安糖尿病 Pima Indians数据集 ,下载地址 Boston波士顿房价数据集 ,下载...
springboot整合rabbitmq发布确认高级
在生产环境中由于一些不明原因,导致 rabbitmq 重启,在 RabbitMQ 重启期间生产者消息投递失败,导致消息丢失,需要手动处理和恢复。于是,我们如何才能进行 RabbitMQ 的消息可靠投递。 发布确认 发布确认方案 架构 配置…...
【linux命令讲解大全】010. mapfile命令和tempfile命令的用法及示例
文章目录 mapfile概要主要用途选项参数返回值例子 tempfile补充说明tempfile 命令$$ 变量 从零学 python mapfile 从标准输入读取行并赋值到数组。 概要 mapfile [-d delim] [-n count] [-O origin] [-s count] [-t] [-u fd] [-C callback] [-c quantum] [array] 主要用途 …...
在 Python 中构建卷积神经网络; 从 0 到 9 的手绘数字的灰度图像预测数字
一、说明 为了预测从0到9的数字,我选择了一个基于著名的Kaggle的MNIST数据集的数据集。数据集包含从 <0> 到 <9> 的手绘图数字的灰度图像。在本文中,我将根据像素数据(即数值数据)和卷积神经网络预测数字。 二、 卷积…...
前端分页处理
页面中实现的分页效果,要么后端提供接口,每次点击下一页就调用接口,若不提供接口,分页得前端自己去截取。 方法一:slice方法 slice(参数1,参数2)方法是返回一个新的数组对象,左开右闭 参数1&…...
【C语言】位操作符的一些题目与技巧
初学者在学完位操作符之后,总是不能很好的掌握,因此这篇文章旨在巩固对位操作符的理解与使用。 有的题目可能会比较难以接受,但是看完一定会有收获 目录 位操作符:一些题目:不创建临时变量交换整数整数转换二进制中1的…...
爬虫逆向实战(二十二)--某恩数据电影票房
一、数据接口分析 主页地址:某恩数据 1、抓包 通过抓包可以发现数据接口是API/GetData.ashx 2、判断是否有加密参数 请求参数是否加密? 无请求头是否加密? 无响应是否加密? 通过查看“响应”模块可以发现,响应是…...
火山引擎发布自研视频编解码芯片
2023年8月22日,火山引擎视频云宣布其自研的视频编解码芯片已成功出片。经验证,该芯片的视频压缩效率相比行业主流硬件编码器可提升30%以上,未来将服务于抖音、西瓜视频等视频业务,并将通过火山引擎视频云开放给企业客户。 火山引…...
投递技术类简历的注意事项
简历修改的背景 作为程序员,随着工作年限的增加,要定期的去修改自己的简历中的工作项目,一方面可以促进自己复盘一下工作成果和个人成长,另外也能给自己换工作提供一个前置的便捷性。 注意事项 修改简历的时候有哪些需要注意的…...
每日一题——柱状图中最大的矩形
柱状图中最大的矩形 题目链接 用什么数据结构? 要得到柱状图中最大的矩形,我们就必须要知道对于每一个高度heights[i],他所能勾勒出的矩形最大是多少(即宽度最大是多少)。 而对应到图上我们可以知道,要知…...
Banana Pi推出基于龙芯2K1000LA处理器的信创工业控制开发平台
Banana Pi推出基于龙芯2K1000LA处理器的信创工业控制开发平台:BPI-5202信创工业控制开发平台 BPI-5202 龙芯2K1000LA 信创工业控制开发平台 1.1 工控机的应用场景 物联网的狂潮,既是一场众多的计算机软硬件厂家(也包括通讯方案和产品厂家&…...
19c补丁后oracle属主变化,导致不能识别磁盘组
补丁后服务器重启,数据库再次无法启动 ORA01017: invalid username/password; logon denied Oracle 19c 在打上 19.23 或以上补丁版本后,存在与用户组权限相关的问题。具体表现为,Oracle 实例的运行用户(oracle)和集…...
椭圆曲线密码学(ECC)
一、ECC算法概述 椭圆曲线密码学(Elliptic Curve Cryptography)是基于椭圆曲线数学理论的公钥密码系统,由Neal Koblitz和Victor Miller在1985年独立提出。相比RSA,ECC在相同安全强度下密钥更短(256位ECC ≈ 3072位RSA…...
Golang 面试经典题:map 的 key 可以是什么类型?哪些不可以?
Golang 面试经典题:map 的 key 可以是什么类型?哪些不可以? 在 Golang 的面试中,map 类型的使用是一个常见的考点,其中对 key 类型的合法性 是一道常被提及的基础却很容易被忽视的问题。本文将带你深入理解 Golang 中…...
1688商品列表API与其他数据源的对接思路
将1688商品列表API与其他数据源对接时,需结合业务场景设计数据流转链路,重点关注数据格式兼容性、接口调用频率控制及数据一致性维护。以下是具体对接思路及关键技术点: 一、核心对接场景与目标 商品数据同步 场景:将1688商品信息…...
Auto-Coder使用GPT-4o完成:在用TabPFN这个模型构建一个预测未来3天涨跌的分类任务
通过akshare库,获取股票数据,并生成TabPFN这个模型 可以识别、处理的格式,写一个完整的预处理示例,并构建一个预测未来 3 天股价涨跌的分类任务 用TabPFN这个模型构建一个预测未来 3 天股价涨跌的分类任务,进行预测并输…...
Cloudflare 从 Nginx 到 Pingora:性能、效率与安全的全面升级
在互联网的快速发展中,高性能、高效率和高安全性的网络服务成为了各大互联网基础设施提供商的核心追求。Cloudflare 作为全球领先的互联网安全和基础设施公司,近期做出了一个重大技术决策:弃用长期使用的 Nginx,转而采用其内部开发…...
BCS 2025|百度副总裁陈洋:智能体在安全领域的应用实践
6月5日,2025全球数字经济大会数字安全主论坛暨北京网络安全大会在国家会议中心隆重开幕。百度副总裁陈洋受邀出席,并作《智能体在安全领域的应用实践》主题演讲,分享了在智能体在安全领域的突破性实践。他指出,百度通过将安全能力…...
#Uniapp篇:chrome调试unapp适配
chrome调试设备----使用Android模拟机开发调试移动端页面 Chrome://inspect/#devices MuMu模拟器Edge浏览器:Android原生APP嵌入的H5页面元素定位 chrome://inspect/#devices uniapp单位适配 根路径下 postcss.config.js 需要装这些插件 “postcss”: “^8.5.…...
推荐 github 项目:GeminiImageApp(图片生成方向,可以做一定的素材)
推荐 github 项目:GeminiImageApp(图片生成方向,可以做一定的素材) 这个项目能干嘛? 使用 gemini 2.0 的 api 和 google 其他的 api 来做衍生处理 简化和优化了文生图和图生图的行为(我的最主要) 并且有一些目标检测和切割(我用不到) 视频和 imagefx 因为没 a…...
【Linux系统】Linux环境变量:系统配置的隐形指挥官
。# Linux系列 文章目录 前言一、环境变量的概念二、常见的环境变量三、环境变量特点及其相关指令3.1 环境变量的全局性3.2、环境变量的生命周期 四、环境变量的组织方式五、C语言对环境变量的操作5.1 设置环境变量:setenv5.2 删除环境变量:unsetenv5.3 遍历所有环境…...
