Android电话号码格式(XXX)-XXX-XXXX



我想以格式 (XXX)-XXX-XXXX中的 EditText输入电话号码。但是我没有为此提供任何解决方案。我成功地键入了,但是当我使用backspace并再次键入编号时,这种格式就不会出现。请给我解决方案。我的代码是

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

看看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());
}

您是否尝试过Android.telephony软件包的PhonenumberformattingTextWatcher?

您可以轻松地将其添加到EditText中,并使用当前语言环境或国家/地区代码格式化文本。

来自Android文档:

观看文本视图,如果输入电话号码将格式化它。

用户时停止格式化

  • 输入不可拨号的字符

  • 在字符串中间删除分离器。

清除文本后,格式将重新启动。

这是一个示例代码:

editText.addTextChangedListener(new PhoneNumberFormattingTextWatcher());

也不要忘记将EditText的输入类型设置为phone

希望它有帮助。

最新更新