我想以EditText
格式(XXX)-XXX-XXXX
键入电话号码。但我没有得到任何解决方案。我成功输入但是当我使用退格键并再次键入数字时,这种格式不会出现。请给我解决方案。我的代码是
phoneEditText.addTextChangedListener(new TextWatcher() {
private int keyDel;
@Override
public void onTextChanged(CharSequence s, int start, int before,
int count) {
phoneEditText.setOnKeyListener(new OnKeyListener() {
@Override
public boolean onKey(View v, int keyCode, KeyEvent event) {
if (keyCode == KeyEvent.KEYCODE_DEL)
keyDel = 1;
return false;
}
});
if (keyDel == 0) {
int len = phoneEditText.getText().length();
if (len == 3
&& !(phoneEditText.getText().toString()
.contains("("))) {
phoneEditText.setText("("
+ phoneEditText.getText().toString().trim()
+ ")-");
phoneEditText.setSelection(phoneEditText.getText()
.length());
} else if ((len == 1 || len == 2 || len == 4 || len == 3)
&& (phoneEditText.getText().toString()
.contains("("))) {
if (len == 4)
phoneEditText.setText(phoneEditText.getText()
.toString().trim()
+ ")-");
phoneEditText.setSelection(phoneEditText.getText()
.length());
} else if (len > 3 && len == 9) {
phoneEditText.setText(phoneEditText.getText()
.toString().trim()
+ "-");
phoneEditText.setSelection(phoneEditText.getText()
.length());
} else if (len > 9 && len == 14) {
}
} else {
keyDel = 0;
}
}
@Override
public void afterTextChanged(Editable arg0) {
}
@Override
public void beforeTextChanged(CharSequence arg0, int arg1,
int arg2, int arg3) {
}
});
答案 0 :(得分:1)
请查看PhoneNumberUtils了解更多选项。
String formattedNumber = PhoneNumberUtils.formatNumber(unformattedNumber);
这将根据该号码所在国家/地区的规则自动格式化数字。
您还可以使用以下方式对可编辑文本进行格式化:
PhoneNumberUtils.formatNumber(Editable text, int defaultFormattingType);
或者使用此参考https://code.google.com/p/libphonenumber/:
PhoneNumberUtil phoneUtil = PhoneNumberUtil.getInstance();
try {
PhoneNumber swissNumberProto = phoneUtil.parse(swissNumberStr, "US");
String Phone=phoneUtil.format(edt.getText().toString(), PhoneNumberFormat.NATIONAL)
} catch (NumberParseException e) {
System.err.println("NumberParseException was thrown: " + e.toString());
}
答案 1 :(得分:0)
您是否尝试过android.telephony包中的PhoneNumberFormattingTextWatcher?
您可以轻松地将其添加到EditText,并使用当前区域设置或国家/地区代码格式化文本。
来自android docs:
观看TextView,如果输入了电话号码,则会对其进行格式化。
用户
时停止格式化
输入不可拨打的字符
删除字符串中间的分隔符。
文本清除后,格式化将重新开始。
以下是示例代码:
editText.addTextChangedListener(new PhoneNumberFormattingTextWatcher());
另外,不要忘记将edittext的输入类型设置为phone
。
希望它有所帮助。