Android 模拟支付宝银行卡号输入四位空格


昨天朋友突然问到输入四位数字后自动补充空格的逻辑设计思路,突然想到支付宝也有类似的功能,所以笔者参考支付宝的输入功能,成功实现下标移动和空格自动补充的逻辑,因此在这里分享给各位开发者们。

具体逻辑实现如下:
  
  
editText.addTextChangedListener(new TextWatcher() {
 
private int oldLength = 0;
private boolean isChange = true;
private int curLength = 0;
private int emptyNumB = 0;
private int emptyNumA = 0;
@Override
public void beforeTextChanged(CharSequence s, int start, int count, int after) {
oldLength = s.length();
Log.i(TAG, "未改变长度: " + oldLength);
emptyNumB = 0;
for (int i = 0; i < s.toString().length(); i++) {
if (s.charAt(i)==' ') emptyNumB++;
}
}
 
@Override
public void onTextChanged(CharSequence s, int start, int before, int count) {
curLength = s.length();
Log.i(TAG, "当前长度: " + curLength);
if (curLength == oldLength || curLength <= 3) {
isChange = false;
} else {
isChange = true;
}
}
 
@Override
public void afterTextChanged(Editable s) {
if (isChange) {
int selectIndex = editText.getSelectionEnd();//获取光标位置
String content = s.toString().replaceAll(" ", "");
Log.i(TAG, "content:" + content);
StringBuffer sb = new StringBuffer(content);
//遍历加空格
int index = 1;
emptyNumA = 0;
for (int i = 0; i < content.length(); i++) {
if ((i + 1) % 4 == 0) {
sb.insert(i + index, " ");
index++;
emptyNumA++;
}
}
Log.i(TAG, "result content:" + sb.toString());
String result = sb.toString();
if (result.endsWith(" ")) {
result = result.substring(0, result.length() - 1);
}
editText.setText(result);
if (emptyNumA > emptyNumB)
selectIndex = selectIndex + (emptyNumA - emptyNumB);
//处理光标位置
if (selectIndex > result.length()||selectIndex+1 == result.length()){
selectIndex = result.length();
}else if (selectIndex < 0){
selectIndex = 0;
}
editText.setSelection(selectIndex);
isChange = false;
}
}
});
如果是有银行卡添加的需求,自动补充空格应该是比较常见的需求,这里分享给大家了,有问题互相交流,谢谢!


傻小孩b
20160219
  • 3
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值