TextWatcher - 空EditText上的退格键

时间:2018-04-13 11:03:09

标签: android textwatcher

我正在开发一个远程控制应用程序,我有一个片段,我在其中添加了一个EditText字段以捕获关键事件,因为我需要将信息发送到我的笔记本电脑上运行的服务器,所以这些字母在我的笔记本电脑的屏幕上可以看到其他角色。 当EditText为空时,我无法使用退格键,因此我无法删除屏幕上已存在的文本。如果我在EditText字段中输入一些文本,如果我按下退格键,则会检测到退格键事件。

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

    previousTextLength = s.length();


}

@Override
public void onTextChanged(CharSequence s, int start, int before, int count) {
    char ch = newCharacter(s, previousText);
    if (ch == 0) {
        return;
    }
    MainActivity.sendMessageToServer("TYPE_CHARACTER");
    MainActivity.sendMessageToServer(Character.toString(ch));

}

@Override
public void afterTextChanged(Editable s) {


}

private char newCharacter(CharSequence currentText, CharSequence previousText) {
    char ch = 0;
    currentTextLength = currentText.length();

    int difference = currentTextLength - previousTextLength;
    if (currentTextLength > previousTextLength) {
        if (1 == difference) {
            ch = currentText.charAt(previousTextLength);
        }
    } else if (currentTextLength < previousTextLength) {
        if (-1 == difference) {
            ch = '\b';
        } else {
            ch = ' ';
        }
    }
    return ch;
}

2 个答案:

答案 0 :(得分:0)

您可以使用onKeyListener检测是否按下了退格键,如下所示:

editText.setOnKeyListener(new OnKeyListener() {                 
    @Override
    public boolean onKey(View v, int keyCode, KeyEvent event) {
        if(keyCode == KeyEvent.KEYCODE_DEL) {  
            //Perform action for backspace
        }
        return false;       
    }
});

答案 1 :(得分:0)

也许作为解决方法,您可以强制EditText的第一个字符为[SPACE]或您想要的任何提示字符。

@Override
public void afterTextChanged(Editable s) {
    // You can replace ' ' and " " with any character you want. For example '>'
    if(s.length() == 0 || s.charAt(0) != ' ') {
        s.insert(0, " ");
    }
}


您可能希望强制光标保持在索引0 ...

之前
editText.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View v) {
        if(editText.getSelectionStart() == 0) {
            editText.setSelection(1);
        }
    }
});

您可能需要进行适当的更改才能忽略s.insert(0, " "),以免将其发送到服务器。

相关问题