我有EditText
我希望将EditText
中输入的数字格式化为美国电话号码格式,例如 1(123)123-123 因此,如果用户自动输入数字 1 (将被添加,这也应该用于删除。我能够添加文本观察器并设置逻辑但我在处理过程中搞砸了删除案例。
这是我的格式化第一个括号的代码逻辑,但是如果我们删除括号那么它将不起作用
editText.addTextChangedListener(new TextWatcher() {
public int after;
public int before;
@Override
public void beforeTextChanged(CharSequence s, int start, int count, int after) {
before = count;
}
@Override
public void onTextChanged(CharSequence s, int start, int before, int count) {
after = count;
}
@Override
public void afterTextChanged(Editable s) {
editText.removeTextChangedListener(this);
if (before < after) {
if (s.length() == 4 && s.charAt(0) == '1') {
String formated = "1 (" + s.toString().substring(1, 4) + ")";
editText.setText(formated);
editText.setSelection(editText.getText().toString().length());
}
}
editText.addTextChangedListener(this);
}
});
答案 0 :(得分:0)
我不会使用此功能来检查文本是否已更改:
if (before < after)
如果有人使用复制粘贴来替换电话号码或在替换之前标记一位数字。
如果!oldtext.equals(s.toString())
继续,请更好地保存您的文字。
假设editText是您的文本框。代码也未经过测试,使用风险自负。
public void afterTextChanged(Editable s) {
editText.removeTextChangedListener(this);
if (before < after) {
if (s.length() == 4 && s.charAt(0) == '1') {
long phoneFmt = Long.parseLong(s.toString().replaceAll("[^\\d]", ""),10);
DecimalFormat phoneDecimalFmt = new DecimalFormat("0000000000");
String phoneRawString= phoneDecimalFmt.format(phoneFmt);
java.text.MessageFormat phoneMsgFmt=new java.text.MessageFormat("({0})-{1}-{2}");
//suposing a grouping of 3-3-4
String[] phoneNumArr={phoneRawString.substring(0, 3),
phoneRawString.substring(3,6),
phoneRawString.substring(6)};
editText.setText(phoneMsgFmt.format(phoneNumArr));
editText.setSelection(editText.getText().toString().length());
}
}
editText.addTextChangedListener(this);
}