13

我只是想在用户在 editText 上按 enter 时捕捉事件。

我没有收到 Toast 消息,不是“按下 Enter”,也不是“按下了某个键!” 任何一个。

我做错了什么?

myEditText.setOnEditorActionListener(new OnEditorActionListener() {

    @Override
    public boolean onEditorAction(TextView v, int actionId, KeyEvent event) {

   Toast.makeText(getApplicationContext(), "Some key pressed!", Toast.LENGTH_LONG).show();

        if (event != null && (event.getKeyCode() == KeyEvent.KEYCODE_ENTER)) {
             Toast.makeText(getApplicationContext(), "Enter pressed", Toast.LENGTH_LONG).show();
                return true;
                }
                return false;
            }
        });

编辑 :

好吧,它适用于 Android 2.3.3 而不适用于 4.1.2 有什么想法可以在任何 android 设备上运行吗?

4

6 回答 6

29

请尝试设置为EditText单行模式。

editText.setSingleLine();

或在您的 xml 布局文件中:

android:singleLine="true"

更新

android:singleLine="true"已弃用。从现在开始,使用android:maxLines="1"withandroid:inputType="text"来实现这个行为

或者

editText.setMaxLines(1);
editText.setInputType(InputType.TYPE_CLASS_TEXT);

用于以编程方式设置。

于 2013-09-23T07:03:17.137 回答
3

android:imeOptions="actionGo"在 xml 中使用。actionDone不再回应onEditorAction

于 2016-01-11T05:52:27.457 回答
3

android:inputType="text"android:imeOptions="actionGo"创造奇迹。

于 2018-04-21T11:41:15.497 回答
2
myEditText.setOnEditorActionListener(new OnEditorActionListener() {

public boolean onEditorAction(TextView arg0, int arg1, KeyEvent arg2) {
    Toast.makeText(getApplicationContext(), "some key pressed", Toast.LENGTH_LONG)
                        .show();
    return false;
}
});

在我的编辑文本中输入某些内容后,此代码显示我按下回车键时按下的一些键。但我不知道你的代码有什么问题。

于 2013-04-09T12:41:28.477 回答
2

对我来说,问题是我设置了 XML android:inputType="textMultiline"。当我删除textMultiline选项时,EditorListener开始工作。

于 2016-01-20T12:01:25.837 回答
1

我不知道为什么 Atul Chatuverdi 的回答被否决了——经过大量浏览,这个最终对我产生了“奇迹”。

我确认 ActionDone 可能不起作用。它适用于我的三星,但由于某种原因不适用于 Fly S。该事件没有被触发。两者都是Android 7.1。我想知道这是否是谷歌键盘的错误......

我用来使它最终在所有设备上运行的代码是

<EditText   
     android:singleLine="true"
     android:inputType="textUri"
     android:maxLines="1"
     android:imeOptions="actionGo"          
     ...
     android:id="@+id/et_path"
     android:layout_width="match_parent"
     android:layout_height="wrap_content"
    />

(您可以使用 text 代替 textUri,具体取决于您的需要)。

在我的片段中:

editText = view.findViewById(R.id.et_path);
...
editText.setOnEditorActionListener(new onGo());

和嵌套类来处理动作。

private class onGo implements TextView.OnEditorActionListener {
   @Override
   public boolean onEditorAction(TextView textView, int i, KeyEvent keyEvent) {
    if (i == EditorInfo.IME_ACTION_GO) {

         // To do stuff
        return true;
    }
    return false;
   }
  }

至于if (event != null && (event.getKeyCode() == KeyEvent.KEYCODE_ENTER))多行文本,我有同样的问题。它适用于三星键盘、黑客键盘,但不适用于谷歌键盘。

出于各种原因(例如粘贴带有输入符号的文本而不是按 Enter 按钮等),建议不要使用 textwatcher。

于 2018-06-22T22:40:54.670 回答