从数字editText中删除非数字字符

时间:2017-12-11 17:49:32

标签: java

我正在使用此代码在第3和第4个号码后的电话号码中添加短划线(' - ')。代码工作得很好。我的问题是,当我按退格键时,我无法删除短划线。我甚至可以添加点,如果我按退格键,我可以删除它们,但是使用短划线,这是不可能的。

    @Override
    public void onViewCreated(View view, @Nullable Bundle savedInstanceState) {
        super.onViewCreated(view, savedInstanceState);
        MainActivity.headerName.setText("Verification");
        phoneNumber = (EditText) getActivity().findViewById(R.id.phoneEditText);
        int grup = 1;

        phoneNumber.addTextChangedListener(new TextWatcher() {

            int keyDel;
            String a= phoneNumber.getText().toString();
            @Override
            public void beforeTextChanged(CharSequence s, int start, int count, int after) {
        }

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

            phoneNumber.setOnKeyListener(new View.OnKeyListener() {
                @Override
                public boolean onKey(View v, int keyCode, KeyEvent event) {

                    if (keyCode == KEYCODE_DEL) {
                        a = a.replace("-" , "");
                        phoneNumber.setText(a);

                        keyDel = 1;
                    }
                    return false;
                }
            });

            if (keyDel == 0) {
                int len = phoneNumber.getText().length();
                if(len == 3 || len == 7) {
                    phoneNumber.setText(phoneNumber.getText() + "-");
               phoneNumber.setSelection(phoneNumber.getText().length());
                }
            } else {
                if(KeyEvent.isModifierKey(KEYCODE_DEL)) {
                    a = a.replace("-" , "");
                    phoneNumber.getText().toString().replace("-" , "");
                    phoneNumber.setText(a);
                }
                keyDel = 0;
            }
        }

        @Override
        public void afterTextChanged(Editable s) {
        }
    });
}

1 个答案:

答案 0 :(得分:0)

我猜你的UI小部件正在格式化它的文本。因此,在删除连字符后,窗口小部件会将其放回。

我建议你单独留下小部件。相反,当您需要使用电话号码时,请从值中删除格式化字符。

String.replaceAll("[^\\d]", "")

从窗口小部件中检索值以供某些外部使用时,您将使用此代码。所以,你可能有一个方法

public String getPhoneNumberUnformatted() {...}

只返回小部件值的数字。