我正在开发一个远程控制应用程序,我有一个片段,我在其中添加了一个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;
}
答案 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, " ")
,以免将其发送到服务器。