使用PhoneNumberUtils中的电话号码格式NaN屏蔽EditText

eun*_*216 24 formatting android masking android-edittext

我想在editText中输入用户输入的电话号码,以便每次用户输入数字时动态改变格式.也就是说,当用户输入最多4位数字时,如7144,editText显示"714-4".我希望每当用户输入数字时动态更新editText以格式化### - ### - ####.如何才能做到这一点?另外,我正在处理多个editTexts.

bro*_*oli 74

最简单的方法是使用内置的Android PhoneNumberFormattingTextWatcher.

所以基本上你在代码中得到你的EditText并设置你的文本观察者......

EditText inputField = (EditText) findViewById(R.id.inputfield);
inputField.addTextChangedListener(new PhoneNumberFormattingTextWatcher());
Run Code Online (Sandbox Code Playgroud)

使用PhoneNumberFormattingTextWatcher的好处是它会根据您的语言环境正确格式化您的号码条目.

  • 如果您需要自定义掩码,您会发现此答案很有用:http://stackoverflow.com/a/34907607/1013929 (3认同)

Rah*_*rma 8

以上答案是正确的,但它适用于特定国家.如果有人想要这样格式化的电话号码(### - ### - ####).然后用这个:

etPhoneNumber.addTextChangedListener(new TextWatcher() {
                @Override
                public void beforeTextChanged(CharSequence s, int start, int count, int after) {
                    int digits = etPhoneNumber.getText().toString().length();
                    if (digits > 1)
                        lastChar = etPhoneNumber.getText().toString().substring(digits-1);
                }

                @Override
                public void onTextChanged(CharSequence s, int start, int before, int count) {
                    int digits = etPhoneNumber.getText().toString().length();
                    Log.d("LENGTH",""+digits);
                    if (!lastChar.equals("-")) {
                        if (digits == 3 || digits == 7) {
                            etPhoneNumber.append("-");
                        }
                    }
                }

                @Override
                public void afterTextChanged(Editable s) {

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

String lastChar = " "在您的活动中声明.

现在在edittext的xml中添加这一行

android:inputType="phone"
Run Code Online (Sandbox Code Playgroud)

就这样.

编辑:如果您希望您的edittext长度限制10位数也添加下面的行:

android:maxLength="12"
Run Code Online (Sandbox Code Playgroud)

(这是12,因为" - "将占用空间两次)


chz*_*hid 7

只需将以下内容添加到电话号码的 EditText 即可获取格式化的电话号码(###-###-####)

Phone.addTextChangedListener(new TextWatcher() {

        int length_before = 0;

        @Override
        public void beforeTextChanged(CharSequence s, int start, int count, int after) {
            length_before = s.length();
        }

        @Override
        public void onTextChanged(CharSequence s, int start, int before, int count) {

        }

        @Override
        public void afterTextChanged(Editable s) {
            if (length_before < s.length()) {
                if (s.length() == 3 || s.length() == 7)
                    s.append("-");
                if (s.length() > 3) {
                    if (Character.isDigit(s.charAt(3)))
                        s.insert(3, "-");
                }
                if (s.length() > 7) {
                    if (Character.isDigit(s.charAt(7)))
                        s.insert(7, "-");
                }
            }
        }
    });
Run Code Online (Sandbox Code Playgroud)