2010-11-13 44 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); 
} 
相关问题