在Jelly Bean模拟器上按下Enter键后,不调用onEditorAction()

时间:2012-07-03 13:17:44

标签: android android-edittext avd android-4.2-jelly-bean

我遇到了最新的Jelly Bean模拟器的问题。我的应用中有几个EditTexts。当用户按下键盘上的ENTER键时,OnEditorActionListener提供特殊处理。这一直到ICS,但现在在Jelly Bean上,侦听器回调方法onEditorAction()不再被调用。只有新行插入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中的错误吗?还是在模拟器中?或者是否有意改变了行为?

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

2 个答案:

答案 0 :(得分: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" />

答案 1 :(得分:0)

这就是我所做的,应该涵盖所有被按下的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   按下回车键。