美文网首页
Android EditText 银行卡四位空一格

Android EditText 银行卡四位空一格

作者: 冰楓紫憶 | 来源:发表于2018-04-04 17:09 被阅读150次
    /**
         * 设置银行卡输入时每隔4位多一位空格
         * @param cardEt
         */
        public static void bankCardInput(final EditText cardEt) {
            //设置输入长度不超过24位(包含空格)
            cardEt.setFilters(new InputFilter[]{new InputFilter.LengthFilter(24)});
            cardEt.addTextChangedListener(new TextWatcher() {
                char kongge = ' ';
                //改变之前text长度
                int beforeTextLength = 0;
                //改变之前的文字
                private CharSequence beforeChar;
                //改变之后text长度
                int onTextLength = 0;
                //是否改变空格或光标
                boolean isChanged = false;
                // 记录光标的位置
                int location = 0;
                private char[] tempChar;
                private StringBuffer buffer = new StringBuffer();
                //已有空格数量
                int konggeNumberB = 0;
    
                @Override
                public void beforeTextChanged(CharSequence s, int start, int count, int after) {
                    beforeTextLength = s.length();
                    if (buffer.length() > 0) {
                        buffer.delete(0, buffer.length());
                    }
                    konggeNumberB = 0;
                    for (int i = 0; i < s.length(); i++) {
                        if (s.charAt(i) == ' ') {
                            konggeNumberB++;
                        }
                    }
                }
    
                @Override
                public void onTextChanged(CharSequence s, int start, int before, int count) {
                    onTextLength = s.length();
                    buffer.append(s.toString());
                    if (onTextLength == beforeTextLength || onTextLength <= 3
                            || isChanged) {
                        isChanged = false;
                        return;
                    }
                    isChanged = true;
                }
    
                @Override
                public void afterTextChanged(Editable s) {
                    if (isChanged) {
                        location = cardEt.getSelectionEnd();
                        int index = 0;
                        while (index < buffer.length()) {
                            if (buffer.charAt(index) == kongge) {
                                buffer.deleteCharAt(index);
                            } else {
                                index++;
                            }
                        }
                        index = 0;
                        int konggeNumberC = 0;
                        while (index < buffer.length()) {
                            if ((index == 4 || index == 9 || index == 14 || index == 19)) {
                                buffer.insert(index, kongge);
                                konggeNumberC++;
                            }
                            index++;
                        }
    
                        if (konggeNumberC > konggeNumberB) {
                            location += (konggeNumberC - konggeNumberB);
                        }
    
                        tempChar = new char[buffer.length()];
                        buffer.getChars(0, buffer.length(), tempChar, 0);
                        String str = buffer.toString();
                        if (location > str.length()) {
                            location = str.length();
                        } else if (location < 0) {
                            location = 0;
                        }
    
                        cardEt.setText(str);
                        Editable etable = cardEt.getText();
                        Selection.setSelection(etable, location);
                        isChanged = false;
                    }
                }
            });
    
        }
    

    相关文章

      网友评论

          本文标题:Android EditText 银行卡四位空一格

          本文链接:https://www.haomeiwen.com/subject/mbflhftx.html