Android:捕获按下键盘输入按钮的 Action

标签 android keyboard android-edittext

我正在尝试响应在数字模式下按下标准系统屏幕软键盘上的回车按钮。当 myCustomEditText 类获得焦点时,键盘出现在屏幕上。

尝试了两种方法:

  1. 重写 onKeyDown():


    public boolean onKeyDown(int keyCode, KeyEvent event) {
        if (keyCode == KeyEvent.KEYCODE_ENTER) {
            //do sth..
            return true;
        }
        return super.onKeyDown(keyCode, event);
    }

  1. 设置监听器setOnKeyListener:

    myCustomEditText.setOnKeyListener(new OnKeyListener() {

        public boolean onKey(View v, int keyCode, KeyEvent event) {
            if (keyCode == KeyEvent.KEYCODE_ENTER) {
                onRightButtonClicked();
                return true;
            }
            return false;
        }
    });

(也在 myCustomEditText 中尝试了 onKeyDown(),但没有效果)

问题是: 上面的这些方法适用于所有按下的键,但适用于 enter 键 - 这些方法甚至根本没有被触发。 (这不是坏的KeyEvent.KEYCODE_...的问题)

我的问题是: 为什么这些方法不是针对回车键触发的,而是针对其他键触发的,以及如何监听正确按下的回车键?

最佳答案

您对 ENTER 的响应与普通键不同,请尝试如下操作:

editText.setOnEditorActionListener(new TextView.OnEditorActionListener() {
    @Override
    public boolean onEditorAction(TextView v, int actionId, KeyEvent event) {

        switch (actionId) {

            case EditorInfo.IME_ACTION_DONE:
                ...
                return true;

            default:
                return false;
        }
    }
});

您可以通过在 XML 中指定 android:imeOptions 或调用 editText.setImeOptions(...) 来指定 ENTER 执行的操作> 使用 EditorInfo 中的常量之一。 imeOptions 还会更改 ENTER 键的外观!例如,如果您将 imeOptions 设置为 actionSearch,则 ENTER 键将看起来像一个搜索按钮。

您可以找到 imeOptions 所有可能值的列表以及描述 here .

关于Android:捕获按下键盘输入按钮的 Action ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25136156/

相关文章:

android - Cordova android 滚动/性能问题

Android 自定义键盘更改背景颜色键按下

java - 如何使用 key 监听器来验证对文本字段的输入

Android edittext无法进入下一个edittext

android - 如何将光标设置到右边(EditText)?

android - 如何在 Android 中通过 XML 使 EditText 不可编辑?

android - 如何在jetpack compose中突出显示文本的特定单词?

android - 通过 NFC 注册 Lollipop (5.1) 的自助服务终端设备

java - 将文本文件写入内部存储的最佳方法?

安卓 : EditText with custom keyboard