在我测试的一款手机上(HTC Incredible,Android 2.2,软件3.21.605.1),我遇到以下行为。OnEditorActionListener在SenseUI键盘上调用两次具有相同的eventTime
当按下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界面和CyanogenMod的CM7)
if (event != null && event.getAction() != KeyEvent.ACTION_DOWN) {
return false;
}
if (actionId != EditorInfo.IME_ACTION_NEXT && actionId != EditorInfo.IME_NULL) {
return false;
}
对你没有答案我很害怕,我只是想说我今天受到这个问题的打击。我从未在今天看过HTC Sense键盘..呃!他们怎么逃避忽略textNoSuggestions标志?使我的UI有点烂,腐烂它们。 – 2010-11-11 16:54:31
我注意到很多应用程序工作不正常,因为他们的键盘没有实现默认按钮(它总是“输入”)。这包括Google提供的应用程序(包括我认为的初始注册过程)。对于HTC来说,这似乎是一件非常重要的事情。 真遗憾,因为我比起Motoblur更喜欢SenseUI。 感谢您的确认。 – mbafford 2010-11-15 13:24:28