如何检测是不是按下退格键?

Posted

技术标签:

【中文标题】如何检测是不是按下退格键?【英文标题】:How to detect if backspace is pressed?如何检测是否按下退格键? 【发布时间】:2020-05-31 16:06:50 【问题描述】:
mainNotes.setOnKeyListener(new View.OnKeyListener() 
                    public boolean onKey(View v, int keyCode, KeyEvent event) 
                        if ((keyCode != KeyEvent.KEYCODE_SLASH) && (titleMod = true) && (keyCode != 46) && (keyCode != KeyEvent.KEYCODE_SLASH) && (keyCode != KeyEvent.KEYCODE_ENTER)) 
                            Toast.makeText(MainActivity.this, "not a slash", Toast.LENGTH_SHORT).show();
                            titleEnd += 1;
                            slashCount = 1;
                         else if ((keyCode == KeyEvent.KEYCODE_DEL) && (titleMod = true)) 
                            Toast.makeText(MainActivity.this, "deleted", Toast.LENGTH_SHORT).show();
                            titleEnd -= 1;

代码无法识别已按下删除。它适用于所有其他按键,如斜杠、其他文本等。它甚至没有记录删除被按下?

【问题讨论】:

您在测试这段代码时实际按的是什么键? @MarsAtomic 我电脑上的删除键。另外,我只是注意到它无法识别模拟器上软件键盘上的按键...?也许这与它有关? KEYCODE_DEL 对应于您的退格键。标准的 android 键盘实际上根本没有删除键,因此您需要按退格键。 @MarsAtomic 知道了。 OnKeyListener 无法识别来自 android 键盘的任何按键。你知道为什么吗? 【参考方案1】:

KeyEvent.KEYCODE_DEL 对应于您的退格键。标准的 Android 键盘实际上根本没有删除键,因此您在通过键盘在模拟器上进行测试时需要按退格键。

为确保检测到软键事件,请避免使用KeyListener 接口,因为它不太可能被软件键盘或模拟器识别。来自official documentation:

软输入法上的按键不需要触发 这个监听器中的方法,实际上不鼓励这样做。这 默认的 android 键盘不会为任何键触发这些 以 Jelly Bean 或更高版本为目标的应用程序,并且只会交付它 对于针对冰淇淋三明治的应用程序的某些按键或 早一点。

请尝试使用KeyboardView.OnKeyboardActionListener

可以在here找到示例代码。

【讨论】:

以上是关于如何检测是不是按下退格键?的主要内容,如果未能解决你的问题,请参考以下文章

如何使用jQuery捕获退格键? [复制]

按下退格键时颤振“.Where”过滤器不更新

有啥方法可以在运行时屏蔽进入 jText 区域的值,如果一直按下退格键,应该清除内容

如何检测网站上是不是按下了退格键?

如何在条目控件为空时检测退格键

如何在自动完成字段角度启用退格