android中的电话号码格式

use*_*619 2 android phone-number android-edittext

在我的应用程序中,我有一个editText,它将接受来自用户的电话号码,我的目标是,一旦用户输入电话号码就应该格式化(如通过应用文本更改的监听器),格式就好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

            }
        });
Run Code Online (Sandbox Code Playgroud)

但是当用户想要从中删除一个数字时editText,它无法正常工作.提前致谢.

Sre*_*hat 8

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

+1 (###) ###-####,1 (###) ###-####,###-####,###-###-####,011 $
Run Code Online (Sandbox Code Playgroud)

以下将满足您的目的:

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;
        }
    }
});
Run Code Online (Sandbox Code Playgroud)

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

PhoneNumberUtils.formatNumber(
    s, PhoneNumberUtils.getFormatTypeForLocale(Locale.US));     
Run Code Online (Sandbox Code Playgroud)