OnEditorActionListener不起作用

时间:2013-04-09 12:26:42

标签: android android-edittext

当用户按下editText上的输入时,我只想抓住该事件。

我没有收到Toast消息,而不是“Enter pressed”而不是“按下某些键!”任

我做错了什么?

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;
            }
        });

E D I T:

嗯,它正在Android 2.3.3上运行,而不是在4.1.2上运行 任何想法如何在任何Android设备上使这个工作?

6 个答案:

答案 0 :(得分:27)

请尝试在单线模式下设置EditText

editText.setSingleLine();

或在您的xml布局文件中:

android:singleLine="true"

<强>更新

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

OR

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

以编程方式设置。

答案 1 :(得分:2)

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

答案 2 :(得分:2)

android:inputType="text"android:imeOptions="actionGo"做奇迹。

答案 3 :(得分:1)

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;
}
});

在我的edittext中输入内容后按Enter键时,此代码显示按下某些键。但是我的代码中没有问题。

答案 4 :(得分:1)

我遇到的问题是我设置了XML android:inputType="textMultiline"。当我删除textMultiline选项后,EditorListener开始工作。

答案 5 :(得分:1)

我不知道为什么Atul Chatuverdi的答案被否决了,在经过大量浏览后,这个人终于对我产生了“惊奇”。

我确认ActionDone可能无法正常工作。它可以在我的Samsung上使用,但由于某些原因在Fly S上无法使用。该事件未触发。两者都是Android 7.1。我想知道这是否是Google键盘的错误...

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

<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"
    />

(您可以根据需要使用文本代替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)),我有同样的问题。它适用于三星键盘,黑客键盘,但不适用于Google键盘。

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