求知 文章 文库 Lib 视频 iPerson 课程 认证 咨询 工具 讲座 Modeler   Code  
会员   
 
  
 
 
     
   
分享到
Android交互体验必知:功能按键事件
 

发布于2012-5-29

 

开始学习

每一种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完成创建,如下图:

步骤2重写onKeyDown()方法

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

@Override 
public boolean onKeyDown(int keyCode, KeyEvent event) { 
   switch(keyCode){ 
      case KeyEvent.KEYCODE_MENU: 
      Toast.makeText(this, "Menu key pressed", Toast.LENGTH_SHORT).show(); 
      return true; 
      case KeyEvent.KEYCODE_SEARCH: 
      Toast.makeText(this, "Search key pressed", Toast.LENGTH_SHORT).show();
      return true; 
      case KeyEvent.KEYCODE_BACK: 
      onBackPressed(); 
      return true; 
      case KeyEvent.KEYCODE_VOLUME_UP: 
      event.startTracking(); 
      return true; 
      case KeyEvent.KEYCODE_VOLUME_DOWN: 
      Toast.makeText(this,"Volumen Down pressed", Toast.LENGTH_SHORT).show(); 
      return false; 
   } 
   return super.onKeyDown(keyCode, event); 
} 

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

步骤3重写onKeyUp方法

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

@Override 
public boolean onKeyUp(int keyCode, KeyEvent event) {
   switch(keyCode){ 
      case KeyEvent.KEYCODE_MENU: 
      Toast.makeText(this, "Menu key released", Toast.LENGTH_SHORT).show(); 
      return true; 
      case KeyEvent.KEYCODE_SEARCH: 
      Toast.makeText(this, "Search key released", Toast.LENGTH_SHORT).show(); 
      return true; 
      case KeyEvent.KEYCODE_VOLUME_UP: 
      if(event.isTracking() && !event.isCanceled()) 
      Toast.makeText(this, "Volumen Up released", Toast.LENGTH_SHORT).show();
      return true; 
      case KeyEvent.KEYCODE_VOLUME_DOWN: 
      Toast.makeText(this, "Volumen Down released", Toast.LENGTH_SHORT).show();
      return true;
   }
	return super.onKeyUp(keyCode, event); 
} 

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

步骤4重写onKeyLongPress方法

重写onKeyLongPress方法的代码如下:

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

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

步骤5重写onBackPressed()方法

代码如下:

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

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

步骤6重写onTouchEvent()方法

代码如下:

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

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

小结

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


相关文章

深度解析:清理烂代码
如何编写出拥抱变化的代码
重构-使代码更简洁优美
团队项目开发"编码规范"系列文章
相关文档

重构-改善既有代码的设计
软件重构v2
代码整洁之道
高质量编程规范
相关课程

基于HTML5客户端、Web端的应用开发
HTML 5+CSS 开发
嵌入式C高质量编程
C++高级编程

 
分享到
 
 
     


android人机界面指南
Android手机开发(一)
Android手机开发(二)
Android手机开发(三)
Android手机开发(四)
iPhone消息推送机制实现探讨
手机软件测试用例设计实践
手机客户端UI测试分析
手机软件自动化测试研究报告
更多...   


Android高级移动应用程序
Android应用开发
Android系统开发
手机软件测试
嵌入式软件测试
Android软、硬、云整合


领先IT公司 android开发平台最佳实践
北京 Android开发技术进阶
某新能源领域企业 Android开发技术
某航天公司 Android、IOS应用软件开发
阿尔卡特 Linux内核驱动
艾默生 嵌入式软件架构设计
西门子 嵌入式架构设计
更多...