Android官方开发文档Training系列课程中文版:键盘输入处理之处理键盘按键
原文地址:http://android.xsoftlab.net/training/keyboard-input/commands.html
當用戶將焦點給到可編輯文本的View時,例如EditText這種,并且該設備還擁有實體鍵盤,那么所有的輸入都會被系統(tǒng)處理。然而,如果你希望可以攔截或者直接處理鍵盤的輸入事件的話,你可以通過實現(xiàn)回調(diào)方法KeyEvent.Callback接口來做到。比如onKeyDown()和onKeyMultiple()。
Activity與View都實現(xiàn)了KeyEvent.Callback接口,所以一般情況下應該重寫這兩個類的回調(diào)方法。
Note: 當通過KeyEvent類或其它相關API處理鍵盤的輸入事件時,應當認為這些鍵盤事件都來自于實體鍵盤。絕不要仰仗接收軟鍵盤的按鍵事件。
處理單個按鍵事件
如果要處理獨立的按鍵事件,需要恰當?shù)氖褂胦nKeyDown()方法或者onKeyUp()方法。通常情況下,如果要確保只有一個按鍵被按下時,應當只使用onKeyUp()方法。如果用戶按下并沒有放開某個按鈕的話,那么onKeyDown()將會被調(diào)用多次。
舉個例子,下面的實現(xiàn)通過響應某些按鍵來控制游戲:
@Override public boolean onKeyUp(int keyCode, KeyEvent event) {switch (keyCode) {case KeyEvent.KEYCODE_D:moveShip(MOVE_LEFT);return true;case KeyEvent.KEYCODE_F:moveShip(MOVE_RIGHT);return true;case KeyEvent.KEYCODE_J:fireMachineGun();return true;case KeyEvent.KEYCODE_K:fireMissile();return true;default:return super.onKeyUp(keyCode, event);} }處理組合按鍵
為了響應組合按鍵事件,比如某些按鍵需要與Shift或者Control組合使用,你可以查詢通過回調(diào)方法傳回的KeyEvent對象。一些方法還為組合按鍵的提供了查詢信息的功能,比如getModifiers()和getMetaState()。。不管如何,最簡單的方案就是通過isShiftPressed()或者isCtrlPressed()檢查你所關心的組合按鍵是否被按下了。
舉個例子,下面是onKeyUp()方法的改良版本,增添了一些專門對于Shift鍵的額外處理:
@Override public boolean onKeyUp(int keyCode, KeyEvent event) {switch (keyCode) {...case KeyEvent.KEYCODE_J:if (event.isShiftPressed()) {fireLaser();} else {fireMachineGun();}return true;case KeyEvent.KEYCODE_K:if (event.isShiftPressed()) {fireSeekingMissle();} else {fireMissile();}return true;default:return super.onKeyUp(keyCode, event);} }總結(jié)
以上是生活随笔為你收集整理的Android官方开发文档Training系列课程中文版:键盘输入处理之处理键盘按键的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 我与导师的聊天记录
- 下一篇: 事理图谱:一种纯学术需求、无法落地、漏洞