我主要通过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并按删除键,则会删除一个字符,但似乎会出现两个。所以,如果我写 enable 并按删除键,它将变为 enab,但实际上发送的是 enabl。
我重写了dispatchKeyEvent,有点起作用了。如果选择了editText,则终端现在通过串行方式删除字符,所以这是一个好步骤。然而,主要问题仍然存在,如果选择终端本身,则屏幕上会写入奇怪的小框,而不是删除字符。嗯,写了一个,如果我继续按删除键,它就会停留在那个小框中,但下次我键入时,按下的删除键数量会显示为方框。这非常奇怪...
就好像它只被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的按键代码,只有Enter键可以使用。
我目前正在尝试https://dev59.com/c3VD5IYBdhLWcg3wXamd...62035_11377462,但如果有其他建议,那就太好了,因为迄今为止约有10个建议都没有奏效。我的退格键不会与editText相关联,而是与终端视图相关联。我甚至无法检测到删除键被按下。