在Android中自动在电话号码中添加短划线

10 android textwatcher

而不是5118710,它应该是511-8710.我想在用户输入EditText中已有3位数的用户之后添加一个破折号.EditText的最大长度仅为7位数.

在我弄清楚上述问题之后,我再次陷入编码困境.当我已经输入3位数字时,它会附加破折号(这就是我想要发生的事情),但我的问题是接下来的3位数字也会附加破折号(如下所示511-871-) ...请帮助我.谢谢!

    txt_HomeNo.addTextChangedListener(new TextWatcher() {

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

            boolean flag = true;
            String eachBlock[] = txt_HomeNo.getText().toString().split("-");
            for (int i = 0; i < eachBlock.length; i++) {
                if (eachBlock[i].length() > 3) {
                    flag = false;
                }
            }

            if (flag) {

                txt_HomeNo.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) {

                    if (((txt_HomeNo.getText().length() + 1) % 4) == 0) {

                        if (txt_HomeNo.getText().toString().split("-").length <= 3) {
                            txt_HomeNo.setText(txt_HomeNo.getText() + "-");
                            txt_HomeNo.setSelection(txt_HomeNo.getText().length());
                        }
                    }
                    a = txt_HomeNo.getText().toString();
                } else {
                    a = txt_HomeNo.getText().toString();
                    keyDel = 0;
                }

            } else {
                txt_HomeNo.setText(a);
            }

        }
Run Code Online (Sandbox Code Playgroud)

ozb*_*bek 36

最直接的解决方案是使用PhoneNumberFormattingTextWatcher将根据系统区域设置格式化数字.

XML:

<EditText
    android:id="@+id/phone_number"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:hint="@string/enter_phone_number"
    android:inputType="phone" />
Run Code Online (Sandbox Code Playgroud)

addTextChangedListener()在课堂上添加:

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


neo*_*108 10

实施以下修改addTextChangedListenertxt_HomeNo.下面的代码是检查输入的文本的长度是否为3,如果是,则将其添加-到其中.不是一个非常强大的解决方案但它的工作

txt_HomeNo.addTextChangedListener(new TextWatcher() {

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

        txt_HomeNo.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 = txt_HomeNo.getText().length();
            if(len == 3) {
                txt_HomeNo.setText(txt_HomeNo.getText() + "-");
                txt_HomeNo.setSelection(txt_HomeNo.getText().length());
            }
        } else {
            keyDel = 0;
        }
    }

    @Override
    public void afterTextChanged(Editable arg0) {
        // TODO Auto-generated method stub
    }

    @Override
    public void beforeTextChanged(CharSequence arg0, int arg1, int arg2, int arg3) {
        // TODO Auto-generated method stub
    }
});
Run Code Online (Sandbox Code Playgroud)


小智 5

我对neo108的解决方案进行了一些小的更改,因此它可以同时用于软键盘和硬键盘,例如在我的代码中,edittext将遵循以下规则,以在位置5和9自动添加“”。

txtPhone.addTextChangedListener(new TextWatcher() {

        int keyDel;

        @Override
        public void beforeTextChanged(CharSequence charSequence, int i, int i1, int i2) {

        }

        @Override
        public void onTextChanged(CharSequence charSequence, int i, int i1, int i2) {
            txtPhone.setOnKeyListener(new View.OnKeyListener() {
                @Override
                public boolean onKey(View view, int keyCode, KeyEvent keyEvent) {
                    if (keyCode == KeyEvent.KEYCODE_DEL) {
                        keyDel = 1;
                    }
                    return false;
                }
            });

            String currentString = txtPhone.getText().toString();
            int currentLength = txtPhone.getText().length();

            if (currentLength == 5 || currentLength == 9) {
                keyDel = 1;
            }

            if (keyDel == 0) {
                if (currentLength == 4 || currentLength == 8) {
                    txtPhone.setText(txtPhone.getText() + " ");
                    txtPhone.setSelection(txtPhone.getText().length());
                }
            } else {
                if (currentLength != 5 && currentLength != 9) {
                    keyDel = 0;
                } else if ((currentLength == 5 || currentLength == 9)
                        && !" ".equals(currentString.substring(currentLength - 1, currentLength))) {
                    txtPhone.setText(currentString.substring(0, currentLength - 1) + " "
                            + currentString.substring(currentLength - 1, currentLength));
                    txtPhone.setSelection(txtPhone.getText().length());
                }
            }
        }
Run Code Online (Sandbox Code Playgroud)