在多次尝试实现 InputFilter 或正则表达式失败后,我选择了更直接的方法:
public void onTextChanged(CharSequence s, int start, int before, int count) {
String a = "";
String str = id.getText().toString();
String replaced = str.replaceAll(Pattern.quote("."),"");
replaced = replaced.replaceAll(Pattern.quote("-"),"");
char[] id_char = replaced.toCharArray();
int id_len = replaced.length();
for(int i = 0; i < id_len; i++) {
if(i == 2 || i == 12) {
a += id_char[i] + ".";
}
else if (i == 5 || i == 9) {
a += id_char[i] + "-";
}
else a += id_char[i];
}
id.removeTextChangedListener(this);
id.setText(a);
if(before > 0) id.setSelection(start);
else id.setSelection(a.length());
id.addTextChangedListener(this);
}
我不知道这是否是最好的方法,但它确实有效。我还没有解决的一个问题是如何在用户删除或插入数字后处理光标位置。如果用户将光标插入 EditText 中的某处并输入新数字,则光标会跳到 EditText 的末尾。我希望光标停留在它所在的位置。另一个问题是,如果用户在 EditText 数字中插入光标并退格以删除数字,则第一个键输入不起作用,而在第二个键上输入了数字。我只能猜测这与焦点有关吗?