关于java:覆盖Android上的删除键?

Override delete key on Android?

我在DispatchKeyEvent中主要解决了这些行的问题:

1
2
3
4
5
6
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);

现在唯一的问题是,如果我选择编辑文本并点击删除,那么一个字符会被删除,但两个字符会出现在屏幕上。所以如果我写"启用"并点击"删除",它将变为"启用",但实际发送的是"启用"。

我骑上了Dispatchkeyevent,这是一种工作。如果选择了edittext,终端现在就可以通过串行删除字符,这是一个很好的步骤。但是,主要的问题仍然存在,如果终端本身被选中,那么奇怪的小方框将被写入屏幕,而不是删除字符。好吧,一个是写的,如果我一直按删除键,它会停留在那个框中,但是下次我键入我所按的删除量时,它会显示为框。很奇怪…

就好像它只是被edittext覆盖,而不是被终端覆盖。

在他们所有的荣耀中的奇怪的小盒子:

Enter image description here

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
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中的backspace工作得很好,我只希望它在终端突出显示并且我正在写的时候工作。

现在,如果我按下删除键,一个小的奇怪的方框字符出现,而没有发生其他事情,我有时会在日志中得到一个异常(http://i.imgur.com/wmrapx.png)。我想知道的是如何更改"删除键"功能,以便当我按下它时,可以发送这样的删除字符,但也可以保留在编辑文本框中删除字符的功能等:

1
sendOverSerial("\b".getBytes("UTF-8"))

这发送了一个正确的背景空间,我只需要合并它。

但软键盘似乎没有注册按键?我一直得到一个0的键码,只有回车键才有效。

我目前正在尝试https://stackoverflow.com/questions/4…62035 U 11377462,但是任何其他建议都是很好的,因为到目前为止大约有10个建议还没有起作用。我的退格键不会与EditText关联,而是与终端视图关联。我甚至检测不到正在按下的删除键。


看起来您使用的终端控件必须使用keycode del而不是让它传播到窗口,并且它必须向远程端发送不同的char而不是。因此,当您的编辑文本聚焦时,DispatchKeyEvent正在处理新闻-但当终端聚焦时,您看不到它。当终端有焦点时,是否确认偶数处理程序正在通过调试器触发?您没有说您在终端上使用的是哪个库,但我会看看这个库,看看您是否可以设置一个键处理程序或其他什么。


我对Android没有任何经验,我也承认我从未尝试过实现删除/退格键绑定。但是,如果我尝试这样做,并且我不知道一个好的标准实现,那么我可以考虑一个可以正常工作的解决方案。使用关联的操作侦听器进行要删除的键绑定。使操作侦听器getText()脱离文本字段,并将其存储为字符串。子字符串包含除最后一个字符以外的所有内容。然后将settext()用于带有新字符串的文本字段。这是一种手动的方式,但肯定会起作用。


我建议捕获完整的字符串,并在用户按下SEnd时立即发送,就像一个聊天程序一样。


解决方案是将写入屏幕的方法移动到另一个类,然后一切都正常工作。