一聚教程网:一个值得你收藏的教程网站

最新下载

热门教程

Android银行卡输入格式化程序

时间:2016-08-19 编辑:简简单单 来源:一聚教程网


我们在输入银行卡号时希望能按格式显示,而不是单纯显示一堆数字,下面一段代码可实现银行卡号格式化输入。

//银行卡号码的格式
   public void bankCardNumAddSpace(final EditText mEditText) {
       mEditText.addTextChangedListener(new TextWatcher() {
           int beforeTextLength = 0;
           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 = mEditText.getSelectionEnd();
                   int index = 0;
                   while (index < buffer.length()) {
                       if (buffer.charAt(index) == ' ') {
                           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, ' ');
                           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;
                   }
 
                   mEditText.setText(str);
                   Editable etable = mEditText.getText();
                   Selection.setSelection(etable, location);
                   isChanged = false;
               }
           }
       });
   }

热门栏目