Low*_*ev1 24 android android-edittext android-4.2-jelly-bean
我有一个编辑文本,在我的应用程序中用作搜索框.在我的Nexus 7上的Jelly Bean中,当我在正在监听的文本框中输入内容并点击时,输入KeyEvent = null并将ActionId = 0传递给onEditorAction()方法.有人遇到过这种情况么?我认为这可能是一个错误.
在下面的第二个if语句中,我得到一个空指针,因为actionId = 0和KeyEvent = null;
// Search field logic.
@Override
public boolean onEditorAction(TextView v, int actionId, KeyEvent event) {
Log.d(TAG, "onEditorAction");
if (event != null && event.getAction() != KeyEvent.ACTION_DOWN)
return false;
if (actionId == EditorInfo.IME_ACTION_SEARCH
|| event.getKeyCode() == KeyEvent.KEYCODE_ENTER) {
.....Do some stuff();
}
}
Run Code Online (Sandbox Code Playgroud)
Low*_*ev1 41
结束为KeyEvent添加空检查.感谢commonsware指出这种情况发生在3.0+.似乎更像是一种解决方法,然后是一种解决方案,但它确实有效.
// Search field logic.
@Override
public boolean onEditorAction(TextView v, int actionId, KeyEvent event) {
Log.d(TAG, "onEditorAction");
if (event != null && event.getAction() != KeyEvent.ACTION_DOWN) {
return false;
} else if (actionId == EditorInfo.IME_ACTION_SEARCH
|| event == null
|| event.getKeyCode() == KeyEvent.KEYCODE_ENTER) {
.....Do some stuff();
}
}
Run Code Online (Sandbox Code Playgroud)
我发现我的"类似bug的行为"是因为imeActionLabel复杂的事情.我只使用它,因为它在" 文本字段指南"中被提及作为一种自定义返回键标签的方法.以下是我在Lollipop测试的结果,
情况1:默认,返回键符号=结束角括号
<EditText
android:singleLine="true"
android:inputType="textUri"/>
Run Code Online (Sandbox Code Playgroud)
onEditorAction被调用一次.
EditorInfo.IME_ACTION_NEXT
情况2 imeOptions:,返回键符号=复选标记
<EditText
android:singleLine="true"
android:inputType="textUri"
android:imeOptions="actionDone"/>
Run Code Online (Sandbox Code Playgroud)
onEditorAction被调用一次.
EditorInfo.IME_ACTION_DONE
案例3 imeActionLabel:,返回键符号="URdone"
<EditText
android:singleLine="true"
android:inputType="textUri"
android:imeOptions="actionDone"
android:imeActionLabel="URdone"/>
Run Code Online (Sandbox Code Playgroud)
onEditorAction可以被多次调用.
KeyEvent = null,actionId = 0
KeyEvent = KeyEvent.ACTION_DOWN,actionId = 0
KeyEvent = KeyEvent.ACTION_UP,actionId = 0
笔记:
我不确定actionId = 0是来自EditorInfo.IME_ACTION_UNSPECIFIED还是EditorInfo.IME_NULL.
如果下一个可聚焦是不可编辑的,则返回键符号将变为左箭头.
您还可以使用setOnFocusChangeListener覆盖onFocusChange,这将根据上面的光标行为进行调用.
| 归档时间: |
|
| 查看次数: |
14693 次 |
| 最近记录: |