android中的电话号码格式
在我的应用程序中,我有一个editText,它将接受用户的电话号码,我的目标是,一旦用户输入电话号码,它就应该格式化(就像在文本更改的侦听器上应用),格式就像android中的电话号码格式,android,android-edittext,phone-number,Android,Android Edittext,Phone Number,在我的应用程序中,我有一个editText,它将接受用户的电话号码,我的目标是,一旦用户输入电话号码,它就应该格式化(就像在文本更改的侦听器上应用),格式就像XXX-XXX-XXXX 我将代码编写为 ePhone.addTextChangedListener(new TextWatcher() { private Pattern pattern; private Matcher matcher; String a;
XXX-XXX-XXXX
我将代码编写为
ePhone.addTextChangedListener(new TextWatcher() {
private Pattern pattern;
private Matcher matcher;
String a;
@Override
public void onTextChanged(CharSequence s, int start, int before, int count) {
// TODO Auto-generated method stub
boolean flag = true;
if (flag) {
if (((ePhone.getText().length() + 1) % 4) == 0)
{
if (ePhone.getText().toString().split("-").length <= 2)
{
ePhone.setText(ePhone.getText() + "-");
ePhone.setSelection(ePhone.getText().length());
}
}
a = ePhone.getText().toString();
} else {
ePhone.setText(a);
}
}
@Override
public void beforeTextChanged(CharSequence s, int start, int count,
int after) {
// TODO Auto-generated method stub
}
@Override
public void afterTextChanged(Editable s) {
// TODO Auto-generated method stus
}
});
ePhone.addTextChangedListener(新的TextWatcher(){
私有模式;
私人匹配器匹配器;
字符串a;
@凌驾
public void onTextChanged(字符序列、int start、int before、int count){
//TODO自动生成的方法存根
布尔标志=真;
国际单项体育联合会(旗){
如果(((ePhone.getText().length()+1)%4)=0)
{
如果(ePhone.getText().toString().split(“-”).length假设您要按照US格式格式化电话号码
+1 (###) ###-####,1 (###) ###-####,###-####,###-###-####,011 $
以下内容适用于您的目的:
phoneEditText.addTextChangedListener(new TextWatcher() {
private boolean mFormatting; // a flag that prevents stack overflows.
private int mAfter;
@Override
public void onTextChanged(CharSequence s, int start, int before, int count) {
}
//called before the text is changed...
@Override
public void beforeTextChanged(CharSequence s, int start, int count, int after) {
mAfter = after; // flag to detect backspace.
}
@Override
public void afterTextChanged(Editable s) {
// Make sure to ignore calls to afterTextChanged caused by the work done below
if (!mFormatting) {
mFormatting = true;
// using US formatting.
if(mAfter != 0) // in case back space ain't clicked.
PhoneNumberUtils.formatNumber(
s,PhoneNumberUtils.getFormatTypeForLocale(Locale.US));
mFormatting = false;
}
}
});
如果您需要特定于位置的服务,即对于每个位置,您需要该位置的特定格式(请参阅)。
如果您只需要所需的格式,那么在上述代码段中的行位置编写一个自定义函数
PhoneNumberUtils.formatNumber(
s, PhoneNumberUtils.getFormatTypeForLocale(Locale.US));
此代码适用于删除和编辑两种情况
public class PhoneNumberFormattingTextWatcher implements TextWatcher {
EditText Edt;
int keyDel=0;
public PhoneNumberFormattingTextWatcher(EditText edt){
Edt =edt;
}
@Override
public void beforeTextChanged(CharSequence charSequence, int i, int i1, int i2) {
}
@Override
public void onTextChanged(CharSequence charSequence, int i, int i1, int i2) {
Edt.setOnKeyListener(new View.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 = Edt.getText().length();
String input=Edt.getText().toString();
if(len == 4) {
Edt.setText( input.substring(0,3)+"-"+ input.substring(3) );
Edt.setSelection(Edt.getText().length());
}
if(len == 8) {
Edt.setText( input.substring(0,7)+"-"+ input.substring(7) );
Edt.setSelection(Edt.getText().length());
}
} else if(keyDel==1){
int len = Edt.getText().length();
if(len == 4||len==8) {
Edt.setText(Edt.getText().delete(Edt.getText().length()-1,Edt.getText().length()) );
Edt.setSelection(Edt.getText().length());
}
keyDel = 0;
}
}
@Override
public void afterTextChanged(Editable editable) {
}
}你可以使用愚弄代码,它会工作的
String number="5129892680";
String formattedNumber = PhoneNumberUtils.formatNumber(number);
在“编辑文本”角中,如果用户单击“关闭”按钮,请单击该按钮以清除所有内容