当backspace键盘按钮单击android时,onKey未触发

当backspace键盘按钮单击android时,onKey未触发,android,android-edittext,Android,Android Edittext,我在Android上使用EditText上的onkeylister来识别何时按下了键盘的退格(delete),并自行处理字符的删除(这样做是因为它是一个与外部服务同步的字段)。 有些人说使用TextWatcher并处理其中一个textchanged事件。虽然这是一个可行的解决方案。我仍在尝试使用onKey 问题在于,只有当EditText中没有文本(空)并按下backspace键时,才会触发On键。如果有文本,onKey在删除所有文本之前不会触发 有没有人知道我在所有的点击中都会触发onKey

我在Android上使用
EditText
上的
onkeylister
来识别何时按下了键盘的退格(delete),并自行处理字符的删除(这样做是因为它是一个与外部服务同步的字段)。 有些人说使用
TextWatcher
并处理其中一个textchanged事件。虽然这是一个可行的解决方案。我仍在尝试使用
onKey

问题在于,只有当
EditText
中没有文本(空)并按下backspace键时,才会触发
On键。如果有文本,
onKey
在删除所有文本之前不会触发

有没有人知道我在所有的点击中都会触发
onKey

这是我的xml:

                <EditText
                android:id="@+id/trackpad_speller_input"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:layout_alignParentTop="false"
                android:layout_margin="10dp"
                android:layout_weight="0.8"
                android:focusable="true"
                android:focusableInTouchMode="true"
                android:imeOptions="actionDone" />
还有我的钥匙

 @Override
public boolean onKey(View v, int keyCode, KeyEvent event) {
    if (keyCode == KeyEvent.KEYCODE_DEL && event.getAction() == KeyEvent.ACTION_DOWN) {
        if (presenter.getSpellerType() == SpellerType.FREE_SPELLER) {
            Log.d(TAG, "backspace pressed and ignored for FREE_SPELLER");
            return false;
        } else {
            Log.d(TAG, "backspace pressed for SEARCH_SPELLER");
            presenter.deleteChar();
        }
    }
    return true;
}

任何帮助都将不胜感激!谢谢:D

我不知道这是否是最好的方法,但我发现设置
EditText
InputType的
setInputType
可以解决问题,并在所有退格点击中触发
onKey

spellerInput.setInputType(InputType.TYPE_CLASS_TEXT | InputType.TYPE_TEXT_VARIATION_VISIBLE_PASSWORD);
希望能有帮助

spellerInput.setInputType(InputType.TYPE_CLASS_TEXT | InputType.TYPE_TEXT_VARIATION_VISIBLE_PASSWORD);