3

我是Android的相对初学者。有人对如何在 EditText/TextView 中监听按键和软键有合理的解释吗?

我希望看到一个全面的教程或一组示例。

据我了解,我可以在我的 Activity 中添加一个 KeyListener,例如 onKeyDown()、onKeyUp(),但是当我尝试这样做时,我无法触发普通键的事件,例如只有 HOME 和 BACK。

我已经看到提到使用 TextWatcher 但这与处理原始键事件不同。

SO上似乎有许多半解决方案。希望你能帮助消除混乱的迷雾......

4

4 回答 4

2

您必须分配一个关键侦听器,而不是分配给活动,而是分配给 EditText 本身。

于 2010-09-16T14:39:40.503 回答
2

这就是我必须听的 BACK 或 MENU 键事件。只需添加此方法,无需实现任何接口。我在我的 BaseActivity 中执行此操作,每个 Activity 都从中继承。

public boolean onKeyDown(int keyCode, KeyEvent event) {
    Log.d(NAME, "Key pressed");

    switch (keyCode) {
    case KeyEvent.KEYCODE_BACK:
        Log.d(NAME, "Back pressed");
        // IGNORE back key!!
        return true;
        /* Muestra el Menú de Opciones */
    case KeyEvent.KEYCODE_MENU:
        Intent menu = new Intent(this, Menu.class);

        // start activity
        startActivity(menu);
        return true;
    }

    return super.onKeyDown(keyCode, event);
}

PS:我强烈反对忽略后退键。

于 2010-09-16T14:45:43.543 回答
1

例如:

myEditText.setOnKeyListener(new OnKeyListener() {
     public boolean onKey(View v, int keyCode, KeyEvent event) {
         if (event.getAction() == KeyEvent.ACTION_DOWN)
             if (keyCode == KeyEvent.KEYCODE_DPAD_CENTER){
                //your code here
             }
         return false;
     }
});
于 2010-12-01T15:40:00.557 回答
0

我最近发现了另一种使用 Activity 卡住的方法onKeyDown,或者使用view.setOnKeyListener.

由于引入了androidP方法。addOnUnhandledKeyEventListener当您的视图能够捕获未处理的关键事件时,它允许您做任何您需要做的事情。

这是我如何使用它的示例:

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.P) yourView.addOnUnhandledKeyEventListener { v, event ->
    when (event.keyCode) {
        KeyEvent.KEYCODE_UNKNOWN -> {
            TODO("Do whatever you need to do.")
            true // Specify you did handle the event
        }
        KeyEvent.KEYCODE_SOFT_RIGHT -> {
            TODO("Do whatever you need to do.")
            true // Specify you did handle the event
        }
        // etc...
        else -> false // Specify you didn't handle the event
    }
}
于 2021-10-15T09:41:25.000 回答