Android如何检测“删除”按钮按键盘上删除单个字符?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Android如何检测“删除”按钮按键盘上删除单个字符?相关的知识,希望对你有一定的参考价值。

我正在开发一个远程控制应用程序,需要检测用户何时按下空文本字段上的<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;
    }
});
答案

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

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

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

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

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

另一答案

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

View.OnKeyListener:

将硬件键事件调度到此视图时要调用的回调的接口定义。这仅适用于硬件键盘;软件输入方法没有义务触发此监听器。

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

另一答案

使用方法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)

以上是关于Android如何检测“删除”按钮按键盘上删除单个字符?的主要内容,如果未能解决你的问题,请参考以下文章

只要按下键盘上的x按钮,如何从一个文本字段中删除值

在VC中 请教如何删除一个button按钮

如何使删除按钮删除JTable中的行?

在检测到更改时刷新 ListView [重复]

如何知道何时单击十进制键盘上的删除按钮

如何在VC++6.0下删除一个按钮控件?