当用户按下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设备上使这个工作?
答案 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。