我发现我的“类似错误的行为”是由于imeActionLabel
事情复杂化。我之所以使用它,是因为在Text Fields Guide中提到它是一种自定义返回键标签的方法。这是我在 Lollipop 中的测试结果,
案例1:默认,返回键符号=右尖括号
<EditText
android:singleLine="true"
android:inputType="textUri"/>
onEditorAction 被调用一次。
- KeyEvent = null,actionId = 5 =
EditorInfo.IME_ACTION_NEXT
- 如果返回 true,光标保持在 EditText 中,键盘打开
- 如果返回false,光标移动到下一个可聚焦的,必要时打开键盘
案例2 imeOptions
:,返回键符号=复选标记
<EditText
android:singleLine="true"
android:inputType="textUri"
android:imeOptions="actionDone"/>
onEditorAction 被调用一次。
- KeyEvent = null,actionId = 6 =
EditorInfo.IME_ACTION_DONE
- 如果返回 true,光标保持在 EditText 中,键盘打开
- 如果返回 false,光标停留在 EditText 中,键盘关闭
案例3 imeActionLabel
:,返回键符号=“URdone”
<EditText
android:singleLine="true"
android:inputType="textUri"
android:imeOptions="actionDone"
android:imeActionLabel="URdone"/>
onEditorAction 可以多次调用。
KeyEvent = null,actionId = 0
- 如果返回 true,光标保持在 EditText,键盘打开,onEditorAction 不会被第二次调用
- 如果返回 false,onEditorAction 被称为 SECOND 时间:
KeyEvent = KeyEvent.ACTION_DOWN
, actionId = 0
- 如果返回false,光标移动到下一个可聚焦,必要时打开键盘,onEditorAction 不会被第三次调用
- 如果返回 true,则 onEditorAction 被调用第三次:
KeyEvent = KeyEvent.ACTION_UP
, actionId = 0
- 如果返回 true,光标保持在 EditText 中,键盘打开
- 如果返回false,光标移动到下一个可聚焦的,必要时打开键盘
笔记:
我不确定 actionId = 0 是否来自EditorInfo.IME_ACTION_UNSPECIFIED
或EditorInfo.IME_NULL
。
如果下一个焦点是不可编辑的,则返回键符号变为左箭头。
您也可以使用setOnFocusChangeListener
to override onFocusChange
,它将根据上述游标行为调用。