检测空 EditText 上的退格键

Detecting backspace on an empty EditText

我正在尝试检测空 EditText 视图中的软键盘退格键。我搜索了 Stack Overflow 以及 Google 和 ~20 个类似的问题,但是 none 有一个检测空 EditText 中的退格键的解决方案。

所有答案都围绕这篇博文展开https://code.i-harness.com/en/q/4a914a 最后特别指出,这不会检测空 EditText 视图上的退格键。

非常感谢您的帮助。

您可以使用此代码检测 edittext 是否为空:

EditText usernameEditText = (EditText) findViewById(R.id.editUsername);
sUsername = usernameEditText.getText().toString();
if (sUsername.matches("")) {
Toast.makeText(this, "You did not enter a username", Toast.LENGTH_SHORT).show();
return;}

检测 EditText 的任何事件或文本更改的最可靠解决方案是使用 TextWatcher,但如果 EditText 已经为空,您无法检测 backspace/delete 键事件 在所有设备上。

请记住这是不可能的,希望您或任何其他人不会浪费您的时间。

希望这可能有所帮助。我尝试在我的项目中使用它。

public class MTextWatcher implements TextWatcher, View.OnKeyListener {
private int prevLen;


public MTextWatcher(int prevLen) {
    this.prevLen = prevLen;
}

@Override
public void beforeTextChanged(CharSequence s, int start, int count, int after) {

}

@Override
public void onTextChanged(CharSequence s, int start, int before, int count) {

}

@Override
public void afterTextChanged(Editable s) {
    //do something if you need
    prevLen = s.toString().length();
}

@Override
public boolean onKey(View v, int keyCode, KeyEvent event) {
    if (keyCode == KeyEvent.KEYCODE_DEL && prevLen == 0){
        // here you can trap the delete key pressed on empty edit text
    }
    return false;
}

}

接下来您可以使用这样的编辑文本附加此侦听器

MTextWatcher watcher = new MTextWatcher(edittext.getText().toString().length());
    edittext.addTextChangedListener(watcher);
    edittext.setOnKeyListener(watcher);