Pau*_*aul 16 java android serial-port
我主要用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);
Run Code Online (Sandbox Code Playgroud)
现在唯一的问题是,如果我选择editText并点击删除,则删除一个字符,但两个字符似乎在屏幕上.因此,如果我写启用并点击删除它将改为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);
};
Run Code Online (Sandbox Code Playgroud)
我使用android中的库连接到终端模拟器,这连接到串行设备(交换机)并显示我发送/接收的数据.我通过终端下方的文本框通过连接发送数据,或者通过键入终端本身并在两种情况下按键盘输入.它只会是一个使用的软键盘.如果我发送了一个不正确的字符串,由于没有删除密钥实现,我处于不可恢复的状态.我的editTxt中的退格键工作正常,我只是希望它在终端突出显示时起作用,而我正在写入.
目前,如果我按下删除一个奇怪的盒子字符出现,没有其他事情发生,我有时会在日志中得到一个例外(http://i.imgur.com/wMRaLPX.png).我想知道的是如何更改删除键功能,以便当我按下它时,我可以发送这样的删除字符,但也保留删除edittext框中的字符等功能:
sendOverSerial("\b".getBytes("UTF-8"))
Run Code Online (Sandbox Code Playgroud)
这会发送一个正确的后退空间,我只需要合并它.
但软键盘似乎没有注册按键?我一直得到一个0的键码,只有输入才有效.
我目前正在尝试/sf/ask/311/...62035_11377462,但任何其他建议都会很棒,因为到目前为止大约有10条建议尚未奏效.我的退格键不会与editText相关联,而是与终端视图相关联.我甚至无法检测到被按下的删除键.
看起来您正在使用的终端控件必须使用 KEYCODE_DEL 而不是让它传播到窗口,并且它必须向远程端发送不同的字符而不是 \b。因此,当您的编辑文本获得焦点时,您的dispatchKeyEvent正在处理按下操作 - 但当终端获得焦点时您看不到它。您是否确认当终端具有焦点时偶数处理程序正在通过调试器触发?您没有说您正在为终端使用哪个库,但我会查看它并看看您是否可以设置密钥处理程序或其他内容。
| 归档时间: |
|
| 查看次数: |
1406 次 |
| 最近记录: |