我遇到了最新的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)
答案 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"
原因,根据文档:
actionId int:动作的标识符。这将是 您提供的标识符,如果由于以下原因而被调用,则为EditorInfo#IME_NULL 按下回车键。