【发布时间】:2012-12-28 09:19:31
【问题描述】:
我主要解决了 dispatchKeyEvent 中这些行的问题:
byte[] cmdLeft = { (byte) 27, (byte) '[', (byte) 'D' };
byte[] cmdErase = { (byte) 27, (byte) '[', (byte) 'P' };
mSession.appendToEmulator(cmdLeft, 0, cmdLeft.length);
mSession.appendToEmulator(cmdErase, 0, cmdErase.length);
现在唯一的问题是,如果我选择 editText 并点击删除,那么一个字符会被删除,但两个字符似乎在屏幕上。所以如果我写启用并点击删除它会变成启用但实际发送的是启用
我覆盖了 dispatchKeyEvent,它确实有效。如果选择了editText,终端现在通过串行删除字符,这是一个很好的步骤。然而,主要问题仍然存在,如果终端本身被选中,奇怪的小框会被写入屏幕而不是删除一个字符。写好了一个,如果我一直按删除它会停留在那个框,但是下次我输入我按下的删除量会显示为框。很奇怪……
就像它只是被编辑文本覆盖而不是终端。
奇特的小盒子尽显荣耀:
public boolean dispatchKeyEvent(KeyEvent event) {
if (event != null && event.getAction() == KeyEvent.ACTION_UP) {
return false;
}
if (event.getKeyCode() == KeyEvent.KEYCODE_DEL) {
try {
sendOverSerial("\b".getBytes("UTF-8"));
}
catch (UnsupportedEncodingException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
return super.dispatchKeyEvent(event);
};
我正在使用 android 中的库连接到终端仿真器,它连接到串行设备(开关)并显示发送/接收的数据。我通过终端下方的文本框或在终端本身输入并在两种情况下按键盘上的 Enter 键通过连接发送数据。它只会是使用的软键盘。如果我发送了不正确的字符串,由于没有删除键实现,我处于不可恢复的状态。我的 editTxt 中的退格可以正常工作,我只是希望它在终端被突出显示并且我正在写的时候工作。
目前,如果我按下删除键,会出现一个奇怪的方框字符而没有其他任何事情发生,有时我会在日志中收到异常(http://i.imgur.com/wMRaLPX.png)。我想知道的是如何更改删除键功能,以便当我按下它时,我可以发送这样的删除字符,但也保留在编辑文本框中删除字符等的能力:
sendOverSerial("\b".getBytes("UTF-8"))
这发送了一个正确的退格,我只需要合并它。
但是软键盘似乎没有记录按键?我不断得到一个 0 的键码,只有输入才能工作。
我目前正在尝试https://stackoverflow.com/questions/4...62035_11377462,但任何其他建议都会很棒,因为到目前为止大约有 10 条建议没有奏效。我的退格键不会与 editText 相关联,而是与终端视图相关联。我什至无法检测到被按下的删除键。
【问题讨论】:
-
ooi,你试过'退格'键吗?
-
你是什么意思?我正在按下退格/删除键。当我说删除时,我的意思是退格。
-
啊,对了,对不起!正在考虑删除和退格是分开的全尺寸键盘配置
-
啊对,没问题。仍然不知道该怎么做,糟糕的时光:D
-
检查这个线程(特别是第二个响应):stackoverflow.com/questions/4886858/…
标签: java android serial-port