23

我对最新的 Jelly Bean 模拟器的行为有疑问。我的应用程序中有几个EditTextsOnEditorActionListener当用户按下键盘上的 ENTER 键时,An提供特殊处理。onEditorAction()这在 ICS 之前一直有效,但现在在 Jelly Bean 上不再调用侦听器回调方法。只有一个新行插入到EditText.

可以这样复制:

EditText testEditText = new EditText(context);
testEditText.setOnEditorActionListener(new OnEditorActionListener() {

    public boolean onEditorAction(TextView v, int actionId, KeyEvent event) {
        Log.d(TAG, "onEditorAction() called");
        return false;
    }
});
addView(testEditText);

这是果冻豆中的错误吗?还是在模拟器中?还是故意改变了行为?

奇怪的是,其他人写道,在运行 Jelly Bean 的 Nexus 7 上调用了该方法,但带有意外参数:null keyevent 和 actionid = 0 in onEditorAction() (Jelly Bean / Nexus 7)

4

2 回答 2

35

如果其他人发现这个问题:

我已经对此进行了多次测试,并且在 Jelly Bean 模拟器上,当在虚拟键盘上按下 Enter 键时,监听器回调方法 onEditorAction() 确实不再被调用。

正如我上面提到的,一种可能的解决方案或解决方法是将 Enter 键替换为可用的操作键之一。那些仍然触发 onEditorAction()。我还必须指定输入类型。

editText.setRawInputType(InputType.TYPE_CLASS_TEXT);
editText.setImeOptions(EditorInfo.IME_ACTION_GO);
<EditText
...
android:imeOptions="actionGo"
android:inputType="text" />
于 2012-07-18T13:01:03.040 回答
1

这是我所做的,它应该涵盖所有类型的 Enter 被按下:

override fun onEditorAction(v: TextView?, actionId: Int, event: KeyEvent?): Boolean {
    if (actionId == EditorInfo.IME_ACTION_DONE || actionId == EditorInfo.IME_NULL)
        ... // Enter pressed

在 XML 我只添加了android:imeOptions="actionGo"

根据文档,原因是:

https://developer.android.com/reference/android/widget/TextView.OnEditorActionListener.html#onEditorAction(android.widget.TextView,%20int,%20android.view.KeyEvent)

actionId int:动作的标识符。这将是您提供的标识符,或者 EditorInfo#IME_NULL 如果由于按下回车键而被调用。

于 2019-06-02T10:49:18.533 回答