Android交互体验必知:功能按键事件

译文
移动开发 Android
在本教程中,读者将学习Android SDK中的功能按键事件的相关知识。一旦读者掌握这方面的知识,则可以更得心应手地控制开发的APP应用。

[[70003]]

【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

调节音量大小

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

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

  1. onKeyDown() 
  2. onKeyUp() 
  3. onKeyLongPress() 

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

  1. onTrackballEvent() 
  2. onTouchEvent() 

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

关于特殊的键

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

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

步骤1建立Android工程

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

建立Android工程

步骤2重写onKeyDown()方法

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

  1.  @Override 
  2. public boolean onKeyDown(int keyCode, KeyEvent event) { 
  3. switch(keyCode){ 
  4. case KeyEvent.KEYCODE_MENU: 
  5. Toast.makeText(this"Menu key pressed", Toast.LENGTH_SHORT).show(); 
  6. return true
  7. case KeyEvent.KEYCODE_SEARCH: 
  8. Toast.makeText(this"Search key pressed", Toast.LENGTH_SHORT).show(); 
  9. return true
  10. case KeyEvent.KEYCODE_BACK: 
  11. onBackPressed(); 
  12. return true
  13. case KeyEvent.KEYCODE_VOLUME_UP: 
  14. event.startTracking(); 
  15. return true
  16. case KeyEvent.KEYCODE_VOLUME_DOWN: 
  17. Toast.makeText(this,"Volumen Down pressed", Toast.LENGTH_SHORT).show(); 
  18. return false
  19. return super.onKeyDown(keyCode, event); 

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

步骤3重写onKeyUp方法

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

  1. @Override 
  2. public boolean onKeyUp(int keyCode, KeyEvent event) { 
  3. switch(keyCode){ 
  4. case KeyEvent.KEYCODE_MENU: 
  5. Toast.makeText(this"Menu key released", Toast.LENGTH_SHORT).show(); 
  6. return true
  7. case KeyEvent.KEYCODE_SEARCH: 
  8. Toast.makeText(this"Search key released", Toast.LENGTH_SHORT).show(); 
  9. return true
  10. case KeyEvent.KEYCODE_VOLUME_UP: 
  11. if(event.isTracking() && !event.isCanceled()) 
  12. Toast.makeText(this"Volumen Up released", Toast.LENGTH_SHORT).show(); 
  13. return true
  14. case KeyEvent.KEYCODE_VOLUME_DOWN: 
  15. Toast.makeText(this"Volumen Down released", Toast.LENGTH_SHORT).show(); 
  16. return true
  17. return super.onKeyUp(keyCode, event); 

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

步骤4重写onKeyLongPress方法

重写onKeyLongPress方法的代码如下:

  1. @Override 
  2. public boolean onKeyLongPress(int keyCode, KeyEvent event) { 
  3. Toast.makeText(this"Pressed for a long time =) ", Toast.LENGTH_SHORT).show(); 
  4. return true

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

步骤5重写onBackPressed()方法

代码如下:

  1. @Override 
  2. public void onBackPressed() { 
  3. Toast.makeText(this"Back key pressed =)", Toast.LENGTH_SHORT).show(); 
  4. super.onBackPressed(); 

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

步骤6重写onTouchEvent()方法

代码如下:

  1. @Override 
  2. public boolean onTouchEvent(MotionEvent event) { 
  3. float x = event.getX(); 
  4. float y = event.getY(); 
  5. Toast.makeText(this"Touch press on x: " + x + " y: "+y, Toast.LENGTH_SHORT).show(); 
  6. return true

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

小结

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

原文地址:http://mobile.tutsplus.com/tutorials/android/android-sdk-intercepting-physical-key-events/

【51CTO译稿,非经授权谢绝转载,合作媒体转载请注明原文出处、作者及51CTO译者!】

责任编辑:佚名 来源: 51CTO.com
相关推荐

2011-12-01 13:48:57

诺基亚N9

2011-03-11 09:01:36

iOS 4.3

2020-07-10 07:58:14

Linux

2024-11-15 11:11:48

2009-12-04 17:13:18

2013-05-06 15:41:30

Android开发资源

2013-07-18 17:22:07

Android开发资源Android开发学习Android开发

2011-01-18 11:07:28

2011-05-18 11:01:39

Oracle

2024-01-03 07:56:50

2022-05-18 09:01:19

JSONJavaScript

2011-06-15 16:50:09

Qt 模块

2011-08-31 11:12:36

2024-07-01 08:27:05

KeyAndroid按键事件

2018-04-12 17:41:39

公共云供应商备份恢复

2019-01-31 10:53:53

企业数据迁移云端

2009-12-25 16:39:24

Linux关机重启命令

2010-10-18 11:35:53

职场

2022-08-19 10:31:32

Kafka大数据

2011-07-05 13:59:23

XML
点赞
收藏

51CTO技术栈公众号