作者热门文章
- mongodb - 在 MongoDB mapreduce 中,如何展平值对象?
- javascript - 对象传播与 Object.assign
- html - 输入类型 ="submit"Vs 按钮标签它们可以互换吗?
- sql - 使用 MongoDB 而不是 MS SQL Server 的优缺点
在我正在测试的一部手机(HTC Incredible、Android 2.2、软件 3.21.605.1)上,我遇到了以下行为。
在按下 Sense UI 键盘上的 Enter 键时(立即)调用了两次 onEditorAction 事件处理程序。
两次调用事件的 KeyEvent.getEventTime() 都是相同的,因此我采用了这种解决方法:
protected void onCreate(Bundle savedInstanceState) {
[...]
EditText text = (EditText)findViewById(R.id.txtBox);
text.setOnEditorActionListener(new OnEditorActionListener() {
private long lastCalled = -1;
public boolean onEditorAction(TextView v, int actionId, KeyEvent event) {
if ( event.getEventTime() == lastCalled ) {
return false;
} else {
lastCalled = event.getEventTime();
handleNextButton(v);
return true;
}
}
});
[...]
}
EditText 定义为:
<EditText
android:layout_width="150sp"
android:layout_height="wrap_content"
android:id="@+id/txtBox"
android:imeOptions="actionNext"
android:capitalize="characters"
android:singleLine="true"
android:inputType="textVisiblePassword|textCapCharacters|textNoSuggestions"
android:autoText="false"
android:editable="true"
android:maxLength="6"
/>
在我测试过的所有其他设备上,操作按钮被正确标记为“下一步”,并且该事件仅在按下该按钮时被调用一次。
这是 Sense UI 键盘中的错误,还是我做错了什么?
感谢您的帮助。
已更新 - 感谢给出的答案,我已确定以下内容作为我的检查。这在我可以测试的两部手机(Sense UI 和 Cyanogenmod CM7)上都可以正常工作
if (event != null && event.getAction() != KeyEvent.ACTION_DOWN) {
return false;
}
if ( actionId != EditorInfo.IME_ACTION_NEXT && actionId != EditorInfo.IME_NULL ) {
return false;
}
最佳答案
正如米奇所说,你必须检查事件 Action :
public boolean onEditorAction(TextView v, int actionId, KeyEvent event) {
if (event == null || event.getAction() != KeyEvent.ACTION_DOWN)
return false;
// do your stuff
return true;
}
此代码段适用于 Sense UI 和模拟器。
关于android - OnEditorActionListener 在 SenseUI 键盘上使用相同的 eventTime 调用了两次,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4087839/
如果我遵循通知栏设计的用户指南,它必须是深灰色(适用于 android < 2.3)但从某种意义上说,通知栏是黑色的,所以我的图标几乎看不见。 有没有办法检测 senseUI 来为 senseUI 创
在我正在测试的一部手机(HTC Incredible、Android 2.2、软件 3.21.605.1)上,我遇到了以下行为。 在按下 Sense UI 键盘上的 Enter 键时(立即)调用了两次
我是一名优秀的程序员,十分优秀!