【发布时间】:2012-08-19 00:24:02
【问题描述】:
好吧,我已经尝试了在 stackoverflow 和其他地方可以找到的所有解决方案,但最终结果并没有改变一点:触发 onKey 事件或 dispatchKeyEvent 的唯一键是回车键虚拟键盘,并且仅在按下两次时。我无法拦截任何其他键(事件顶部有一个断点,并且 Eclipse 永远不会停止它,除非是上述输入)。模拟器和真实设备上的行为是相同的。有任何想法吗?先感谢您 我的代码 atm 如下所示:
public class ChatWindow {
@Override
public void onCreate(Bundle savedInstanceState) {
//...
setSendText();
//...
}
private void setUserInput() {
Intent i = getIntent();
mChatInput = (EditText) findViewById(R.id.UsrInput);
if (i.hasExtra(INTENT_EXTRA_MESSAGE)) {
mChatInput.setText(i.getExtras().getString(INTENT_EXTRA_MESSAGE));
}
mChatInput.setFocusable(true);
mChatInput.requestFocus();
mChatInput.setFocusableInTouchMode(true);
mChatInput.addTextChangedListener(new TextWatcher() {
public void afterTextChanged (Editable s){
Log.d(TAG, "afterTextChanged");
if (mChatInput.getText().length() >= 1) {
mChatInput.addTextChangedListener(this);
//mChatInput.setOnKeyListener(this);
//mChatInput.dispatchKeyEvent(this);
mSendButton.setEnabled(true);
}
else
mSendButton.setEnabled(false);
}
public void beforeTextChanged (CharSequence s, int start, int
count, int after)
{
Log.d(TAG, "beforeTextChanged");
}
public void onTextChanged (CharSequence s, int start, int before,
int count)
{
Log.d(TAG, s.toString());
}
});
}
}
@Override
public boolean dispatchKeyEvent(KeyEvent event) {
//THIS HERE IS NEVER FIRED UNLESS THE ENTER KEY IS CLICKED TWICE
if (event.getAction() == KeyEvent.ACTION_DOWN
&& event.getKeyCode()==KeyEvent.KEYCODE_ENTER) {
sendMessageIfNotNull();
return true;
}
return false;
}
【问题讨论】:
-
你曾经解决过这个问题吗?我在使用 Galaxy Note 2 时遇到了完全相同的问题
-
我不是 Android 专家,但是 dispatchKeyEvent 函数在你的类之外,它不应该附加到活动或键监听器吗?
-
您还需要为 Key Up 事件返回 true。您还应该从
dispatchKeyEvent内部发布您想做的任何事情,而不是直接执行它,因为此回调发生在密钥处理期间。您还为在侦听器 impl 中观看的每个额外角色添加多个侦听器。
标签: android android-edittext keylistener keyevent onkeydown