自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

Android交互體驗必知:功能按鍵事件

譯文
移動開發(fā) Android
在本教程中,讀者將學習Android SDK中的功能按鍵事件的相關(guān)知識。一旦讀者掌握這方面的知識,則可以更得心應(yīng)手地控制開發(fā)的APP應(yīng)用。

[[70003]]

【51CTO獨家譯文】本文為翻譯自外文網(wǎng)站tutsplus.com的《Android交互體驗必知:功能按鍵事件》。以下為全部譯文:

開始學習

每一種Android設(shè)備一般都會提供除字母和數(shù)字外的物理功能按鍵,這一般是根據(jù)不同的Android制造商而有所不同,比如Sony就只實現(xiàn)了這些功能按鍵中的三種而已。這些功能按鍵如果設(shè)計良好,對于正在開發(fā)的app應(yīng)用,能給用戶帶來很好交互體驗。

Android應(yīng)用主要是基于Activities的設(shè)計,這個相信大多數(shù)開發(fā)者都已經(jīng)十分熟悉,并可以在官方開發(fā)手冊中學習到。而今天我們準備學習的是如何通過實現(xiàn)KeyEvent.Callback這個接口從而能重新定義Android設(shè)備上的功能按鍵,為我們開發(fā)的應(yīng)用服務(wù)。

功能按鍵的常量定義和方法

KeyEvent類有多個定義好的key常量,表示一個標準的Android設(shè)備中的功能按鍵,列表入下:

功能按鍵

常量定義

描述

Power

KEYCODE_POWER

打開設(shè)備或者將設(shè)備喚醒

Back

KEYCODE_BACK

回到上一屏(頁)

Home

KEYCODE_HOME

返回主菜單(屏幕)

SEARCH

KEYCODE_SEARCH

打開一個搜索

CAMERA

KEYCODE_CAMERA

打開攝像頭功能

VOLUME

KEYCODE_VOLUME_UP

KEYCODE_VOLUME_DOWN

調(diào)節(jié)音量大小

讀者可以從官方文檔中,找到更多關(guān)于功能按鍵的常量定義,以上列表的只是常用的幾個。

對于功能按鍵的調(diào)用,常用的回調(diào)方法有入下幾個:

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

而對于設(shè)備中的軌跡球或者觸摸屏幕,常用的回調(diào)方法有入下幾個:

  1. onTrackballEvent() 
  2. onTouchEvent() 

開發(fā)者可以選擇只實現(xiàn)上面談到的某些回調(diào)方法即可,不需要全部都實現(xiàn)。例如,如果想避免用戶偶然按下了CAMERA或者SEARCH檢索的功能鍵,則只需要在onKeyDown()的回調(diào)方法中進行編寫代碼控制,并返回true的值,讓系統(tǒng)知道當前捕捉的是onkeyDown事件即可。

關(guān)于特殊的鍵

然而,有些特殊的鍵是開發(fā)者沒有辦法去重新定制的,因為它們直接由系統(tǒng)去調(diào)用,比如象power和home鍵,BACK回退鍵也是特殊鍵之一,盡管如果開發(fā)者要重新定制其行為的話,可以重新覆寫onBackPressed()方法,但在一般情況下,強烈不建議開發(fā)者這樣去做,因為回退鍵本身功能是回到上一屏的,重新定制的話會給用戶帶來很多困擾。

下面我們就以一個具體例子說明如何定制這些功能鍵。

步驟1建立Android工程

首先打開eclipse,選擇新建立一個Android功能,將工程命名為KeyControl,選擇使用Android2.1版本的SDK,***點FINISH完成創(chuàng)建,如下圖:

建立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方法中,分別根據(jù)keycode去判斷觸發(fā)的是哪個功能鍵,例如菜單menu鍵,BACK鍵,搜索功能鍵盤,聲音鍵等,并且通過Toast的顯示方式實現(xiàn)了自己的功能,而沒有調(diào)用原先該功能鍵盤的實際功能。其中請注意的是,上面代碼中對KeyEvent.KEYCODE_VOLUME_DOWN的捕捉事件中,返回的值不是true,而是false,則表明由系統(tǒng)直接處理該功能事件,當用戶按下聲音鍵時,實際上已經(jīng)是通過系統(tǒng)調(diào)用而減少了音量大小。

步驟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()方法中,對某一個功能鍵調(diào)用了event.startTracking()方法跟蹤,并且按下這個功能鍵有一陣時間后才觸發(fā)。所以上面的代碼我們是在按下音量的增加功能鍵一陣時間后,會顯示提示信息。event.startTracking()方法之能在同一時間監(jiān)視一個按鍵,如果同一時間另外一個按鍵也按下,則該事件會取消對前一個按鍵的跟蹤。

步驟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坐標,并顯示出來。

小結(jié)

本文中,簡單介紹了在Android中如何對常見的功能按鍵進行覆寫的方法以及其中的注意點。讀者可以在應(yīng)用中,根據(jù)實際情況需要進行定制,以設(shè)計出更好的用戶體驗的應(yīng)用。

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

【51CTO譯稿,非經(jīng)授權(quán)謝絕轉(zhuǎn)載,合作媒體轉(zhuǎn)載請注明原文出處、作者及51CTO譯者!】

責任編輯:佚名 來源: 51CTO.com
相關(guān)推薦

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-07-18 17:22:07

Android開發(fā)資源Android開發(fā)學習Android開發(fā)

2013-05-06 15:41:30

Android開發(fā)資源

2011-05-18 11:01:39

Oracle

2024-01-03 07:56:50

2011-01-18 11:07:28

2022-05-18 09:01:19

JSONJavaScript

2011-06-15 16:50:09

Qt 模塊

2011-08-31 11:12:36

2018-04-12 17:41:39

公共云供應(yīng)商備份恢復(fù)

2009-12-25 16:39:24

Linux關(guān)機重啟命令

2019-01-31 10:53:53

企業(yè)數(shù)據(jù)遷移云端

2011-07-05 13:59:23

XML

2022-08-19 10:31:32

Kafka大數(shù)據(jù)

2010-10-18 11:35:53

職場
點贊
收藏

51CTO技術(shù)棧公眾號