2010-11-13 24 views

回答

13

對這個問題的回答應該是雙重的。它是由密鑰的生成方式決定的。如果按下硬件按鍵,則下面描述的兩種方法都是有效的。如果是按軟件鍵,則取決於實際的上下文。

1)如果key是被長按菜單鍵獲得的軟鍵盤上的按壓的結果是:

你需要仔細重寫以下功能:

@Override 
public boolean onKeyDown(int keyCode, KeyEvent event) { 

    switch (keyCode) { 
     case KeyEvent.KEYCODE_A: 
     { 
      //your Action code 
      return true; 
     } 
    } 
    return super.onKeyDown(keyCode, event); 
} 

2 。)如果您的活動包含EditText,並且從它獲得了軟鍵盤,則第一種方法不起作用,因爲關鍵事件已被EditText佔用。您需要使用文本已改變監聽器:

mMyEditText.addTextChangedListener(new TextWatcher() 
{ 
    public void afterTextChanged(Editable s) 
    { 
    } 
    public void beforeTextChanged(CharSequence s, int start, int count, int after) 
    { 
     /*This method is called to notify you that, within s, the count characters beginning at start are about to be replaced by new text with length after. It is an error to attempt to make changes to s from this callback.*/ 
    } 
    public void onTextChanged(CharSequence s, int start, int before, int count) 
    { 
    } 
); 
+0

您是否嘗試了建議的方法?它有用嗎? – Zelimir 2011-01-07 14:06:59

+0

這隻能捕獲後退和菜單等硬鍵事件,而不是軟輸入鍵事件。 – ozmank 2011-11-17 14:44:47

+0

你確定嗎?對於我來說,對於字母也是正確的。你在哪個手機上測試過? – Zelimir 2011-11-17 15:08:35

4

Zelimir代碼的工作,如果你的ssoo版本是高達2.3 如果你有這樣的代碼在2.3上運行它不會在所有工作的方式來控制事件鑰匙所有的ssoo版本與dispatchKeyEvent()

@Override 
    public boolean dispatchKeyEvent(KeyEvent event) { 
     Log.d("hello", String.valueOf(event.getKeyCode())); 
     return super.dispatchKeyEvent(event); 
    } 

有了這個,你可以控制在web視圖或任何你在哪裏按下的鍵。唯一的錯誤是你無法控制「動作按鈕」......不知道爲什麼。

1

試試看,這個效果非常好。

@Override 
public boolean onKeyUp (int keyCode, KeyEvent event){ 
char c = (char) event.getUnicodeChar(); 
//Do something.... 
return super.onKeyUp(keyCode, event); 
} 
相關問題