【问题标题】:Phone number format in androidandroid中的电话号码格式
【发布时间】:2013-03-07 19:24:42
【问题描述】:

在我的应用程序中,我有一个editText,它将接受用户的电话号码,我的目标是,一旦用户输入电话号码,它就应该被格式化(就像应用在文本更改的监听器上一样),格式就像@ 987654321@.

我把代码写成

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

            }
        });

但是当用户想从这个editText 中删除一个号码时,它不能正常工作。 提前致谢。

【问题讨论】:

  • 如果用户单击该按钮清除所有内容,则在该编辑文本角放置一个关闭按钮

标签: android android-edittext phone-number


【解决方案1】:

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

+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)。 如果你只需要你需要的格式,那么在上面代码sn-p中的line处写一个自定义函数。

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

【讨论】:

    【解决方案2】:

    此代码在删除和编辑两种情况下都有效。

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

    }

    【讨论】:

      【解决方案3】:

      你可以使用愚蠢的代码。

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

      【讨论】:

        猜你喜欢
        • 2016-05-04
        • 1970-01-01
        • 2012-12-17
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-07-25
        • 2016-12-24
        • 2011-12-07
        相关资源
        最近更新 更多