【问题标题】:Android how to detect "delete" button press on keyboard to delete a single character?Android如何检测键盘上的“删除”按钮删除单个字符?
【发布时间】:2015-05-01 18:59:43
【问题描述】:

我正在开发一个远程控制应用程序,需要检测用户何时按下空文本字段上的<x 删除按钮以发送此字符并从远程计算机中删除某些内容。

如何检测到用户按下了Android键盘上的<x删除按钮?

我尝试在关键听众上投放广告,但这似乎不起作用。

final EditText edittext = (EditText) findViewById(R.id.editText);
edittext.setOnKeyListener(new View.OnKeyListener() {
    public boolean onKey(View v, int keyCode, KeyEvent event) {
        // If the event is a key-down event on the "enter" button
        Log.i("KEYCODE", "" + keyCode);
        if ((event.getAction() == KeyEvent.ACTION_DOWN) &&
                (keyCode == KeyEvent.KEYCODE_ENTER)) {
            // Perform action on key press
            return false;
        } else if (edittext.length() == 0) {
            if(keyCode == KeyEvent.KEYCODE_DEL) {
                //perform erase when the text field is empty
            }
        }
        return false;
    }
});

【问题讨论】:

  • BACKSPACE、TAB、ENTER、RETURN、ESC 和 DELETE)不需要检查密钥是否已编码;对于那些键,你应该直接使用 key 变量 46 is keyCode for delete
  • 我刚刚在屏幕上添加了一个相当于删除的按钮。我用键盘显示/隐藏它
  • 酷,能看到吗?
  • 我已经开始这个问题来处理删除按钮的实现,相当于软键盘删除:stackoverflow.com/questions/30103895/…
  • 你找到解决这个问题的方法了吗? onKeyListener 适用于硬件键盘,适用于软件键盘可覆盖 editText 中的 InputConnection(新的自定义 InputConnectionWrapper 具有覆盖 deleteSurroundingText 方法),但我更喜欢单一解决方案

标签: java android keyboard onkeydown textedit


【解决方案1】:

我知道我迟到了,但希望这对其他人有所帮助。 没有直接的方法可以使用侦听器来执行此操作,但是如果您查看 onTextChanged Listener 的文档,您会发现:

调用此方法是为了通知您,在 s 内,从 start 开始的 count 个字符刚刚替换了有长度的旧文本之前

所以在退格的情况下,你会遇到这种情况:

s(可编辑视图)内,以 start(取决于光标所在位置)开始的 0 个字符替换了before(它的值通常为 1,除非用户先选择了一些文本然后按退格键)

因此,如果 count == 0,您可以假设按下了删除键。

【讨论】:

    【解决方案2】:

    使用方法 DispatchKeyEvent :

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

    (stolen from here)

    【讨论】:

      【解决方案3】:

      您不能将View.OnKeyListener 用于软件键盘。

      View.OnKeyListener:

      硬件按键事件被分派到这个视图时调用的回调接口定义。这仅对硬件键盘有用; 软件输入法没有义务触发这个监听器

      来源:http://developer.android.com/reference/android/view/View.OnKeyListener.html

      【讨论】:

        猜你喜欢
        • 2012-08-18
        • 2016-03-30
        • 2020-02-16
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-10-16
        • 1970-01-01
        • 2021-07-14
        相关资源
        最近更新 更多