android中的电话号码格式

时间:2013-03-19 07:52:43

标签: android android-edittext phone-number

在我的应用程序中,我有一个editText,它将接受来自用户的电话号码,我的目标是,一旦用户输入电话号码就应该格式化(如通过应用文本更改的监听器),格式就像{ {1}}。

我把代码编写为

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 } }); 中的数字时,它无法正常工作。 提前谢谢。

3 个答案:

答案 0 :(得分:8)

假设您想按照美国格式格式化电话号码。

+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;
        }
    }
});

如果您需要特定于位置的服务,即每个位置,您需要该地点的特定格式(请参阅this link)。 如果您只需要所需的格式,请在上面的代码段中的line位置编写自定义函数。

PhoneNumberUtils.formatNumber(
    s, PhoneNumberUtils.getFormatTypeForLocale(Locale.US));     

答案 1 :(得分:0)

此代码适用于删除和编辑的情况。

 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) {

}

}

答案 2 :(得分:-1)

您可以使用它可以使用的愚蠢代码。

String number="5129892680";
String formattedNumber = PhoneNumberUtils.formatNumber(number);