【android】EditText输入银行卡号每四位空一格
2017-07-13 15:53
411 查看
完美仿微信银行卡号输入,输入每4个数字就自动添加一个空格
代码如下:
一般银行卡号最长21位,再加上中间的5个空格,所以我们设置EditText的最大可输入长度为26
使用方法如下:
1.设置EditText的最大可输入长度为26
2.添加EditText输入监听
代码如下:
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 space private static final int DEFAULT_MAX_LENGTH = 21 + 5; //max input length private int maxLength = DEFAULT_MAX_LENGTH; private int beforeTextLength = 0; private boolean isChanged = false; //space count private 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); } @Override public 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 ++; } } } @Override public 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; } @Override public void afterTextChanged(Editable s) { if (isChanged) { int selectionIndex = editText.getSelectionEnd(); //total char length int index = 0; while (index < buffer.length()) { if (buffer.charAt(index) == ' ') { buffer.deleteCharAt(index); } else { index ++; } } //total space count index = 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 index if (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 selection Selection.setSelection(text, selectionIndex < maxLength ? selectionIndex : maxLength); isChanged = false; } } }
一般银行卡号最长21位,再加上中间的5个空格,所以我们设置EditText的最大可输入长度为26
使用方法如下:
1.设置EditText的最大可输入长度为26
<EditText android: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 监听EdiText 检测输入银行卡号每四位自动空格
- Android 模拟支付宝银行卡号输入四位空格
- Android-->自定义模版EditText(多用于手机号码,银行卡号等输入)
- 输入银行卡号,每四位自动加一个空格
- IOS TextField 输入银行卡号格式化(每四位中间空一格)
- android EditText输入四位数字密码明文显示
- Android EditText 银行卡四位空一格
- 移动web处理input输入框输入银行卡号四位一空格
- Android之输入银行卡号判断属于哪个银行
- UIUItextfield输入类似银行卡号需要每四位加一个空格的实现
- js实现input中输入数字,控制每四位加一个空格(银行卡号格式)
- Android根据输入银行卡号判断属于哪个银行
- Android EditText 银行卡四位空一格
- Android 之 Edittext输入四位自动空格
- Android中控制银行卡号的输入 即4个数字空一格
- 银行卡号的输入,每四位加一个空格
- 根据输入的银行卡号显示开户银行类型,并将银行卡号四位分隔
- Android EditText 对输入字数和内容范围进行限制
- android EditText怎样限制用户的输入?数字/字母/邮箱
- Android 在java代码中设置EditText只接受数字输入