Java 安卓如何检测;删除“;按键盘上的按钮删除单个字符?

Java 安卓如何检测;删除“;按键盘上的按钮删除单个字符?,java,android,keyboard,onkeydown,textedit,Java,Android,Keyboard,Onkeydown,Textedit,我正在开发一个远程控制应用程序,需要检测用户何时按下,您不能将视图.OnKeyListener用于软件键盘 View.OnKeyListener: 将硬件键事件调度到此视图时要调用的回调的接口定义。这只对硬件键盘有用软件输入法没有义务触发此侦听器 来源:我知道我迟到了,但希望这能帮助其他人。 使用侦听器没有直接的方法可以做到这一点,但是如果您查看的文档,您会发现: 调用此方法的目的是通知您,在s中,从开始的计数字符刚刚替换了以前长度的旧文本 因此,如果出现退格,您将遇到以下情况: 在s(可编辑视

我正在开发一个远程控制应用程序,需要检测用户何时按下
,您不能将
视图.OnKeyListener
用于软件键盘

View.OnKeyListener:

硬件键事件调度到此视图时要调用的回调的接口定义。这只对硬件键盘有用软件输入法没有义务触发此侦听器


来源:

我知道我迟到了,但希望这能帮助其他人。 使用侦听器没有直接的方法可以做到这一点,但是如果您查看的文档,您会发现:

调用此方法的目的是通知您,在s中,从开始的计数字符刚刚替换了以前长度的旧文本

因此,如果出现退格,您将遇到以下情况:

s(可编辑视图)中,0字符开始于开始处(取决于光标所在位置)已替换了在之前长度的旧文本(其值通常为1,除非用户先选择一些文本,然后点击退格键)


因此,如果count==0,则可以假定已按下delete键。

使用DispatchKeyEvent方法:

@Override public boolean dispatchKeyEvent(@NonNull KeyEvent event) { 
    if (event.getAction() == KeyEvent.ACTION_DOWN
        && event.getKeyCode() == KeyEvent.KEYCODE_DEL) {
        // ... 
    }
    return super.dispatchKeyEvent(event);
}

退格、制表符、回车、回车、ESC和删除)无需检查键是否已编码;对于这些键,只需直接使用key变量46 is keyCode fore delete,我刚刚在屏幕上添加了一个按钮,相当于delete。我用键盘显示/隐藏它很酷,能看到吗?我开始这个问题是为了处理删除按钮的实现,这相当于软键盘删除:你找到这个问题的解决方案了吗?onKeyListener适用于硬件键盘,也适用于软件键盘,可以覆盖editText中的InputConnection(使用override deleteSurroundingText方法的新自定义InputConnectionWrapper),但我更喜欢单一解决方案
@Override public boolean dispatchKeyEvent(@NonNull KeyEvent event) { 
    if (event.getAction() == KeyEvent.ACTION_DOWN
        && event.getKeyCode() == KeyEvent.KEYCODE_DEL) {
        // ... 
    }
    return super.dispatchKeyEvent(event);
}