Android onKeyDown()在按下删除按钮时不执行

时间:2015-05-19 08:46:09

标签: android methods onkeydown

当用户按下Android设备的删除按钮时,我使用以下方法从EditText中删除值。

@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
    if (keyCode == KeyEvent.KEYCODE_DEL) {
        onDeleteKey();
        return true;
    }
    return super.onKeyDown(keyCode, event);
}


private void onDeleteKey() {
    if (edt_passcode1.isFocused()) {

    } else if (edt_passcode2.isFocused()) {
        edt_passcode1.requestFocus();
        edt_passcode1.setText("");
    } else if (edt_passcode3.isFocused()) {
        edt_passcode2.requestFocus();
        edt_passcode2.setText("");
    } else if (edt_passcode4.isFocused()) {
        edt_passcode3.requestFocus();
        edt_passcode3.setText("");
    }
}

我想在用户按下设备上的删除按钮时删除以前的EditText值,但是在按下删除按钮时不会调用它。但是onKeyDown()方法没有调用。

请帮帮我。

感谢。

1 个答案:

答案 0 :(得分:0)

来自活动文档:

Called when a key was pressed down and not handled by any of the views 
inside of the activity. So, for example, key presses while the cursor 
is inside a TextView will not trigger the event (unless it is a 
navigation to another object) because TextView handles its own key 
presses. 

我猜这是你的问题?

链接: http://developer.android.com/reference/android/app/Activity.html#onKeyDown%28int,%20android.view.KeyEvent%29

编辑: 一种可能的解决方案是将自定义onKeyListener附加到TextView。没有必要像建议的评论者一样对TexView进行子类化,尽管这也是一个选项。 您可以从此SO-Question获取keyListener的模板: Get the key pressed in an EditText

下一页编辑: 我刚刚意识到第一个解决方案只适用于硬件键盘。 如果你想要虚拟键盘支持,我最好的猜测是TextWatcher。 请参阅此处的示例实现: Validating edittext in Android

下一个并且充满希望的最终编辑: 一些谷歌搜索出现了Activity dispatchKeyEvent() - 方法。只需像使用onKeyDown一样实现它,您将传递一个KeyEvent,它将告诉您所有关于按下的键的信息。 这是指向文档的链接: http://developer.android.com/reference/android/app/Activity.html#dispatchKeyEvent%28android.view.KeyEvent%29