Android:按下键盘输入按钮的捕捉动作

我试图在屏幕软键盘上以数字模式按下标准系统上的输入按钮.当myCustomEditText类获得焦点时,屏幕上会出现键盘.

试过两种方法:

>重写onKeyDown():



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

>设置监听器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(),但没有效果)

问题是:
上面的这些方法适用于所有按下的键,但对于输入键 – 这些方法甚至根本不被触发. (这不是坏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或使用EditorInfo中的一个常量调用editText.setImeOptions(…)来指定ENTER执行的操作. imeOptions也会改变ENTER键的外观!例如,如果将imeOptions设置为actionSearch,则ENTER键将看起来像搜索按钮.

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

相关文章

ADB Remote ATV Android TV 的遥控器,基于 ADB Shell 命令 ...
使用Flutter自带的SearchDelegate组件实现搜索界面,通过魔改...
上篇文章讲解了怎么使用Kotlin的协程配合Retrofit发起网络请...
安卓开发——WebView+Recyclerview文章详情页,解决高度...
Android 如何解决dialog弹出时无法捕捉Activity的back事件 在...