android 菜单 功能键,Android交互体验必知:功能按键事件

bd7aae0068ed1543783c57d18a8ab9ae.png

【51CTO独家译文】本文为翻译自外文网站tutsplus.com的《Android交互体验必知:功能按键事件》。以下为全部译文:

开始学习

每一种Android设备一般都会提供除字母和数字外的物理功能按键,这一般是根据不同的Android制造商而有所不同,比如Sony就只实现了这些功能按键中的三种而已。这些功能按键如果设计良好,对于正在开发的app应用,能给用户带来很好交互体验。

Android应用主要是基于Activities的设计,这个相信大多数开发者都已经十分熟悉,并可以在官方开发手册中学习到。而今天我们准备学习的是如何通过实现KeyEvent.Callback这个接口从而能重新定义Android设备上的功能按键,为我们开发的应用服务。

功能按键的常量定义和方法

KeyEvent类有多个定义好的key常量,表示一个标准的Android设备中的功能按键,列表入下:

功能按键

常量定义

描述

Power

KEYCODE_POWER

打开设备或者将设备唤醒

Back

KEYCODE_BACK

回到上一屏(页)

Home

KEYCODE_HOME

返回主菜单(屏幕)

SEARCH

KEYCODE_SEARCH

打开一个搜索

CAMERA

KEYCODE_CAMERA

打开摄像头功能

VOLUME

KEYCODE_VOLUME_UP

KEYCODE_VOLUME_DOWN

调节音量大小

读者可以从官方文档中,找到更多关于功能按键的常量定义,以上列表的只是常用的几个。

对于功能按键的调用,常用的回调方法有入下几个:

onKeyDown()

onKeyUp()

onKeyLongPress()

而对于设备中的轨迹球或者触摸屏幕,常用的回调方法有入下几个:

onTrackballEvent()

onTouchEvent()

开发者可以选择只实现上面谈到的某些回调方法即可,不需要全部都实现。例如,如果想避免用户偶然按下了CAMERA或者SEARCH检索的功能键,则只需要在onKeyDown()的回调方法中进行编写代码控制,并返回true的值,让系统知道当前捕捉的是onkeyDown事件即可。

关于特殊的键

然而,有些特殊的键是开发者没有办法去重新定制的,因为它们直接由系统去调用,比如象power和home键,BACK回退键也是特殊键之一,尽管如果开发者要重新定制其行为的话,可以重新覆写onBackPressed()方法,但在一般情况下,强烈不建议开发者这样去做,因为回退键本身功能是回到上一屏的,重新定制的话会给用户带来很多困扰。

下面我们就以一个具体例子说明如何定制这些功能键。

步骤1建立Android工程

首先打开eclipse,选择新建立一个Android功能,将工程命名为KeyControl,选择使用Android2.1版本的SDK,***点FINISH完成创建,如下图:

b580695e7c5dc6f3cff4675e5f1f8e64.png

步骤2重写onKeyDown()方法

首先学习重写onKeyDown()方法,代码如下:

@Override

publicbooleanonKeyDown(intkeyCode, KeyEvent event) {

switch(keyCode){

caseKeyEvent.KEYCODE_MENU:

Toast.makeText(this,"Menu key pressed", Toast.LENGTH_SHORT).show();

returntrue;

caseKeyEvent.KEYCODE_SEARCH:

Toast.makeText(this,"Search key pressed", Toast.LENGTH_SHORT).show();

returntrue;

caseKeyEvent.KEYCODE_BACK:

onBackPressed();

returntrue;

caseKeyEvent.KEYCODE_VOLUME_UP:

event.startTracking();

returntrue;

caseKeyEvent.KEYCODE_VOLUME_DOWN:

Toast.makeText(this,"Volumen Down pressed", Toast.LENGTH_SHORT).show();

returnfalse;

}

returnsuper.onKeyDown(keyCode, event);

}

在上面的代码中,在onKeyDown方法中,分别根据keycode去判断触发的是哪个功能键,例如菜单menu键,BACK键,搜索功能键盘,声音键等,并且通过Toast的显示方式实现了自己的功能,而没有调用原先该功能键盘的实际功能。其中请注意的是,上面代码中对KeyEvent.KEYCODE_VOLUME_DOWN的捕捉事件中,返回的值不是true,而是false,则表明由系统直接处理该功能事件,当用户按下声音键时,实际上已经是通过系统调用而减少了音量大小。

步骤3重写onKeyUp方法

同样道理,我们重写onKeyUp方法,代码如下:

@Override

publicbooleanonKeyUp(intkeyCode, KeyEvent event) {

switch(keyCode){

caseKeyEvent.KEYCODE_MENU:

Toast.makeText(this,"Menu key released", Toast.LENGTH_SHORT).show();

returntrue;

caseKeyEvent.KEYCODE_SEARCH:

Toast.makeText(this,"Search key released", Toast.LENGTH_SHORT).show();

returntrue;

caseKeyEvent.KEYCODE_VOLUME_UP:

if(event.isTracking() && !event.isCanceled())

Toast.makeText(this,"Volumen Up released", Toast.LENGTH_SHORT).show();

returntrue;

caseKeyEvent.KEYCODE_VOLUME_DOWN:

Toast.makeText(this,"Volumen Down released", Toast.LENGTH_SHORT).show();

returntrue;

}

returnsuper.onKeyUp(keyCode, event);

}

在上面的代码中,基本跟之前的onKeyDown()方法中介绍的功能一样,分别对Menu菜单,Search检索功能,减少音量三个键重新覆写了方法,用Toast的方式显示信息。而在Volumeup音量增加的按键事件捕捉中,如果用户一段时间没按下去的话,则会提示出错信息。

步骤4重写onKeyLongPress方法

重写onKeyLongPress方法的代码如下:

@Override

publicbooleanonKeyLongPress(intkeyCode, KeyEvent event) {

Toast.makeText(this,"Pressed for a long time =) ", Toast.LENGTH_SHORT).show();

returntrue;

}

onKeyLongPress方法是在当在onKeyDown()方法中,对某一个功能键调用了event.startTracking()方法跟踪,并且按下这个功能键有一阵时间后才触发。所以上面的代码我们是在按下音量的增加功能键一阵时间后,会显示提示信息。event.startTracking()方法之能在同一时间监视一个按键,如果同一时间另外一个按键也按下,则该事件会取消对前一个按键的跟踪。

步骤5重写onBackPressed()方法

代码如下:

@Override

publicvoidonBackPressed() {

Toast.makeText(this,"Back key pressed =)", Toast.LENGTH_SHORT).show();

super.onBackPressed();

}

依然要提醒读者注意的是,***不要重写该方法,因为会给用户的操作体验带来困扰。

步骤6重写onTouchEvent()方法

代码如下:

@Override

publicbooleanonTouchEvent(MotionEvent event) {

floatx = event.getX();

floaty = event.getY();

Toast.makeText(this,"Touch press on x: "+ x +" y: "+y, Toast.LENGTH_SHORT).show();

returntrue;

}

在上面的代码中,在onTouchEvent方法中,当用户触摸屏幕时,会获得触摸点所在的X坐标和Y坐标,并显示出来。

小结

本文中,简单介绍了在Android中如何对常见的功能按键进行覆写的方法以及其中的注意点。读者可以在应用中,根据实际情况需要进行定制,以设计出更好的用户体验的应用。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/562208.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

基于java springboot博客交流平台系统设计和实现

本项目演示连接地址》 前言 博客,又译为网络日志、 部落格或部落阁等,是一种通常由个人管理、不定期张贴新的文章的网站。 博客上的文章通常根据张贴时间, 以倒序方式由新到旧排列。 许多博客专注在特定的课题上提供评论或新闻&…

基于JavaWeb SSM mybatis 私人健身房系统管理平台设计和实现以及文档报告

本项目演示链接地址》 主要技术:Java 、springmvc、mybatis、jQuery 数据库:mysql 主要功能模块:登录、管理员列表、会员用户列表、健身课程信息、教练信息、器材信息、训练信息等 部分功能截图如下: 登录: 系统首…

基于 java springboot+layui仓库管理系统设计和实现

本项目演示链接地址》 主要功能模块 1.用户模块管理:用户登录、用户注册、用户的查询、添加、删除操作、 2.客户信息管理:.客户列表的展示、添加、修改、删除操作、 3.供应商管理:供应商详情列表的查看、添加、删除等操作、 4.退货管理和…

基于jsp+mysql+Spring+hibernate+的SSH在线学习交流论坛平台

本项目演示链接地址》 主要功能模块设计: 管理员角色包含以下功能:管理员登录,发布公告,修改资料,查看新帖,查看精华帖请求,封锁用户,创建讨论区等功能。 用户角色包含以下功能:按分类查看,用户登录,查看帖子详情,查看我的帖子,提交帖子,资料…

Java--Mybatis万字长文经典面试题王者笔记《收藏版》

前言: 前段时间一直和大家在分享java项目实战的内容、今天趁着周末给大家整理了Java工程师在面试中经常被问到持久层框架的面试题《Java--Mybatis》篇、希望大家喜欢、支持。后期也会继续整理其他的知识点、比如、ZooKeeper、Dubbo、Redis、MySQL、Spring、…

基于javaweb(springboot+mybatis)宠物医院预约管理系统设计和实现

本项目演示链接地址》 项目使用java SpringMVC、springboot mybatis、layui为核心技术编写 多的不说,直接上一部分效果图吧 首页登录有可爱的小猫咪 系统主页主要功能有会员信息、宠物管理、预约管理和统计分析等 预约列表 医院管理 宠物档案管理 下载订阅地址 相…

基于JavaWEB SSM SpringBoot婚纱影楼摄影预约网站设计和实现

本项目演示链接地址 》 主要功能设计: 运行环境: java jdk 1.8环境:IDEAtomcat环境: Tomcat 7.x,8主要功能说明: 管理员角色包含以下功能:管理员登录,订单管理,摄影师管理,级别管理,标签管理,摄影地点管理,客片管理,轮…

android 通知传值,Android消息通知(notification)和PendingIntent传值

Android支持Toast和NotificationManager两种通知方式,前者相当于一个定时关闭的对话框,后者是在状态栏上显示一条消息。Toast和Notification都可以随时取消。ToastA toast is a view containing a quick little message for the user. The toast class h…

基于java SSM医药住院管理系统设计和实现

本项目演示链接地址 》 主要功能设计:入院管理,登记、出院登记、查询、转房、病房管理、病房价格调整、缴费和记录、护理、住院历史、统计、药品管理、医生、用户、系统 springMVC spring mybatis jquery js css tomcat mysql等技术 主要功能截图如下…

基于jsp+Spring boot+mybatis的图书管理系统设计和实现

🍅 作者主页:Java李杨勇 🍅 简介:Java领域优质创作者🏆、【java李杨勇】公号作者✌ 简历模板、学习资料、面试题库【关注我,都给你】 🍅文末获取源码联系🍅 前言 随着网络技术的发…

android 开发环境以及hello world,Android Studio开发环境搭建和HelloWorld

先下一个Pie吧然后发现run的位置是灰色的,而且这个Add Configuration没有下拉列表我去百度了一下这个问题,它让我在下拉列表里找APP???百度上面没有找到关于这个的解答,我就想是不是我的安装包出问题了,于是我就卸了重新装彻底…

基于jsp+mysql+Spring+hibernate+在线学习交流论坛平台

本项目演示链接地址 》 主要功能模块设计: 管理员角色包含以下功能:管理员登录,发布公告,修改资料,查看新帖,查看精华帖请求,封锁用户,创建讨论区等功能。 用户角色包含以下功能:按分类查看,用户登录,查看帖子详情,查看我的帖子,提交帖子,资料…

基于jsp+Spring+mybatis的SSM企业门户网站设计和实现

本项目演示链接地址 》 前言 人类社会已经迈入了21世纪,信息技术的浪潮也冲击着社会的方方面面。以计算机互联网为核心的科学技术为社会各行各业提供了前所未有的机会和发展潜力。生产业也不例外。互联网走到今天,也有五年的光景了,之间经历了…

html+字体图标找不到字体,bootstrap中不显示字体图标问题怎么解决?

bootstrap中不显示字体图标的原因是什么?怎么解决?下面本篇文章给大家介绍一下。有一定的参考价值,有需要的朋友可以参考一下,希望对大家有所帮助。你在使用bootstrap字体图标的时候,是否遇到引用本地Bootstrap文件无法…

buffsize 缓冲区的大小多少合适_对于Redis性能指标监控!你了解多少?

监控指标性能指标:Performance内存指标: Memory基本活动指标:Basic activity持久性指标: Persistence错误指标:Error监控方式redis-benchmarkredis-statredis-fainaredisliveredis-climonitorshowlog1.get:获取慢查询日志2.len&am…

java怎么确定数据在区间内_处理数据时,单元格内内容太多无法计数怎么破?...

在职场办公中,处理数据时有时会遇到古里古怪的数据源,比如从系统导出来的或是表哥表弟们录入数据的不规范。从而使得后续处理起来比较棘手。规范数据源很重要!话不多说,先来看看今天要分享的案例:每个订单下有多种物料…

html调用app store,iOS 获取appStore的链接地址,从app中跳转 appStore中应用

从app中跳转到appStore中,分为1.取得app在appStore中的链接地址mac打开iTunes,在右上角中的搜索框中输入你的应用名称。在弹出的菜单中,选择复制链接,得到该应用的链接地址:https://itunes.apple.com/cn/app/jie-zou-da-shi/id493…

上下级平台之间数据同步方案_Alluxio与底层存储系统之间的元数据同步机制

请点击上方蓝字,关注我们哦!作者简介:林意群,Apache Hadoop PMC member,Apache Ozone PMC member,拥有多年参与开源社区经验,主要专注于存储领域的研究和学习,目前任eBay Hadoop tea…

基于java SSM图书管理系统简单版设计和实现

本项目演示链接地址 》 主要技术:后台采用技术: SSM框架(SpringMVC Spring Mybatis) 前台采用技术: div css 功能比较简单、适合学习使用 主要功能:登录、图书类型添加、图书类型列表、编辑和删除、图书上传。图书列表、导出…

html中的行内标签吗,HTML标签中行内元素和块级元素详解

本文主要和大家详细介绍了HTML常用的标签中行内元素和块级元素,需要的朋友参考下吧,希望能帮助到大家。块元素(block element) HTML标签分类明细* address - 地址* blockquote - 块引用* center - 举中对齐块* dir - 目录列表* p - 常用块级容易&#xf…