【问题标题】:Android Phone number format (XXX)-XXX-XXXX安卓手机号码格式(XXX)-XXX-XXXX
【发布时间】:2014-03-01 10:04:01
【问题描述】:

我想以(XXX)-XXX-XXXX 格式输入电话号码EditText。但我没有得到任何解决方案。我成功输入了,但是当我使用退格键并再次输入数字时,这种格式不会出现。请给我解决方案。我的代码是

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

【问题讨论】:

  • android:inputType="phone"
  • 通过输入类型我们只能找到简单的数字。我想当用户输入电话号码时自动出现上述格式。
  • 什么是“我们只能找到简单的数字”??
  • 你现在有你的代码吗?可以展示一下吗?
  • 你能解决这个问题吗....我也面临同样的问题

标签: android android-edittext phone-number


【解决方案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());
}

【讨论】:

  • 我已经尝试了每个选项都没有工作..电话号码实用程序不会在运行时更改电话号码。我想要如果用户输入数字然后在edittext上实现的运行时格式。
  • 谢谢。但我认为这段代码是固定数字的,不是我想要的格式。
  • 我已经在另一个线程中发布了我的答案,stackoverflow.com/questions/6142813/…
【解决方案2】:

你试过 android.telephony 包中的 PhoneNumberFormattingTextWatcher 吗?

您可以轻松地将其添加到 EditText 并使用当前区域设置或国家/地区代码格式化文本。

来自android docs

观察一个 TextView,如果输入了电话号码,则会对其进行格式化。

用户停止格式化

  • 输入不可拨号字符

  • 删除字符串中间的分隔符。

清除文本后将重新开始格式化。

这是一个示例代码:

editText.addTextChangedListener(new PhoneNumberFormattingTextWatcher());

另外不要忘记将编辑文本的输入类型设置为phone

希望对您有所帮助。

【讨论】:

    猜你喜欢
    • 2013-03-19
    • 2017-10-25
    • 2016-06-04
    • 1970-01-01
    • 1970-01-01
    • 2012-11-20
    • 1970-01-01
    • 2011-09-02
    • 2021-01-01
    相关资源
    最近更新 更多