完美仿微信银行卡号输入,输入每4个数字就自动添加一个空格

代码如下:

import android.text.Editable;
import android.text.Selection;
import android.text.TextWatcher;
import android.widget.EditText;/*** Bank card input TextWatcher* 4 grouping input* Please set EditText max length is 26* Created by cc_want on 2017/7/13.*/
public class BankCardTextWatcher implements TextWatcher {//default max length = 21 + 5 spaceprivate static final int DEFAULT_MAX_LENGTH = 21 + 5;//max input lengthprivate int maxLength = DEFAULT_MAX_LENGTH;private int beforeTextLength = 0;private boolean isChanged = false;//space countprivate int space = 0;private StringBuffer buffer = new StringBuffer();private EditText editText;public static void bind(EditText editText){new BankCardTextWatcher(editText,DEFAULT_MAX_LENGTH);}public static void bind(EditText editText,int maxLength){new BankCardTextWatcher(editText,maxLength);}public BankCardTextWatcher(EditText editText,int maxLength){this.editText = editText;this.maxLength = maxLength;editText.addTextChangedListener(this);}@Overridepublic void beforeTextChanged(CharSequence s, int start, int count, int after) {beforeTextLength = s.length();if (buffer.length() > 0) {buffer.delete(0, buffer.length());}space = 0;for (int i = 0; i < s.length(); i++) {if (s.charAt(i) == ' ') {space ++;}}}@Overridepublic void onTextChanged(CharSequence s, int start, int before, int count) {int length = s.length();buffer.append(s.toString());if (length == beforeTextLength || length <= 3|| isChanged) {isChanged = false;return;}isChanged = true;}@Overridepublic void afterTextChanged(Editable s) {if (isChanged) {int selectionIndex = editText.getSelectionEnd();//total char lengthint index = 0;while (index < buffer.length()) {if (buffer.charAt(index) == ' ') {buffer.deleteCharAt(index);} else {index ++;}}//total space countindex = 0;int totalSpace = 0;while (index < buffer.length()) {if ((index == 4 || index == 9 || index == 14 || index == 19 || index == 24)) {buffer.insert(index, ' ');totalSpace ++;}index++;}//selection indexif (totalSpace > space) {selectionIndex += (totalSpace - space);}char[] tempChar = new char[buffer.length()];buffer.getChars(0, buffer.length(), tempChar, 0);String str = buffer.toString();if (selectionIndex > str.length()) {selectionIndex = str.length();} else if (selectionIndex < 0) {selectionIndex = 0;}editText.setText(str);Editable text = editText.getText();//set selectionSelection.setSelection(text, selectionIndex < maxLength ? selectionIndex : maxLength);isChanged = false;}}
}

一般银行卡号最长21位,再加上中间的5个空格,所以我们设置EditText的最大可输入长度为26

使用方法如下:

1.设置EditText的最大可输入长度为26

<EditTextandroid:layout_width="match_parent"android:layout_height="wrap_content"android:hint="请输入您的卡号"android:inputType="number"android:maxLength="26"android:singleLine="true" />  

2.添加EditText输入监听

BankCardTextWatcher.bind(mEdtBankCardNo);

【android】EditText输入银行卡号每四位空一格相关推荐

  1. Android中的EditText输入银行卡号四位空一格

    近期项目开发有需要用户输入银行卡号,为了便于用户区分自己是否输入的正确,提升用户体验,特做了银行卡号四位一空格的操作.同时考虑到粘贴复制过来的银行卡号也要做四位一空格的处理,所以自定义了一个监听事件, ...

  2. android edittext 输入手机号码格式变化

    android edittext 输入内容只能是xxx-xxxx-xxxx格式的手机号码 EditText phoneEt = (EditText) findViewById(R.id.phone_e ...

  3. Android EditText输入光标居于开头最开始位置

    Android EditText输入光标居于开头最开始位置 Android的EditText输入光标默认是居于整个EditText的中心位置的,如图所示: 如果欲使EditText加载后的输入光标自动 ...

  4. vue input银行卡四位空一格

    bankCardNo:function(newval){// 四位空一格this.$nextTick(() => {this.bankCardNo = newval.replace(/\s/g, ...

  5. Android EditText输入一串字符串自动每4个字符空一格,像输入银行卡卡号格式

    最近写类似需要像银行卡输入那样每4个字符空一格,网上看了很多都没有很好的解决索性自己写一个.主要思路就是活用beforeTextChanged().onTextChanged().afterTextC ...

  6. android edittext 输入长度,Android EditText限制输入字数的方法

    本文实例讲述了Android EditText限制输入字数的方法.分享给大家供大家参考,具体如下: //新浪微博字数限制 private static final int WEIBO_CONTENT_ ...

  7. Android EditText输入限制及字符编码

    EditText 经常会有限制输入字符长度的需求,限制输入长度的方法有三种: xml设置maxLength属性 android:maxLength="50" 通过InputFilt ...

  8. android edittext 输入完成监听,EditText输入监听

    EditText输入监听 原创 6710766562015-05-13 13:34:38著作权 文章分类 android开发 阅读数 548 ©著作权归作者所有:来自51CTO博客作者67107665 ...

  9. 【uniapp】小程序中输入银行卡号每四位留一个空格

    <view class="top_number"><input type="number" :value="userInputCar ...

最新文章

  1. JavaEE进阶知识学习-----SpringCloud(四)Eureka集群配置
  2. 浏览器兼容性 问题收集
  3. telegram 机器人_学习使用Python在Telegram中构建您的第一个机器人
  4. Cordova安装与配置过程中出现的问题及解决办法
  5. 【零基础学Java】—抽象方法和抽象类(二十二)
  6. App Store中国区下架近5万款未提供版号的游戏;微软源代码遭黑客访问;Rust 1.49.0发布
  7. 编译错误: Too much data space used by DLL's in MODULES section
  8. 蓝桥杯 ADV-208 算法提高 矩阵相乘
  9. 经常使用的文件工具类
  10. Raki的读paper小记:Audio Captioning with Composition of Acoustic and Semantic Information
  11. Win10电脑微软应用商店打不开怎么办
  12. Nodejs写的搬家工具知识分享
  13. windows认证密码抓取
  14. 银行卡quickpass闪付芯片通过EVM/PBOC读取信息
  15. 浅析欢乐时光(HAPPY TIME)病毒
  16. Leetcode练习 快慢指针
  17. 数据挖掘算法和实践(三):朴素贝叶斯(mushrooms蘑菇数据集)
  18. 共享屏幕,录屏的方法
  19. Java后端生成Echarts并渲染Word转PDF
  20. 优维EasyOps,打造新一代运维新方式

热门文章

  1. 如何正确使用HTTP代理?
  2. saf java_[原创]Android Storage Access Framework(SAF)框架实现外置SD卡的写入(JAVA层与JNI层HOOK)...
  3. SpringBoot: Could not resolve placeholder 'XXXX' in value ${XXXX}
  4. 万维考试系统题库答案python_万维题库与试卷管理系统
  5. 当谈论机器学习中的公平公正时,我们该谈论些什么?
  6. 一个精壮的代购骗子被我用Python彻底征服了。居然坑到我头上来了。
  7. Qt数字电子钟(根据进位计算实现)
  8. 那些著名的软件都是用什么语言编写的?
  9. web项目接入微信登录
  10. 如何知道当前linux登录的是哪个终端设备