Android手机号码格式(XXX)-XXX-XXXX

时间:2014-02-05 05:33:01

标签: android android-edittext phone-number

我想以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) {
            }
        });

2 个答案:

答案 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

希望它有所帮助。