EditText两个数字自动加空格
来源:互联网 发布:java前端和后端哪个好 编辑:程序博客网 时间:2024/04/28 12:19
public class MyTextWatcher implements TextWatcher { int label; EditText editText; public MyTextWatcher(int label,EditText editText) { this.label = label; this.editText = editText; } @Override public void beforeTextChanged(CharSequence s, int start, int count, int after) { } @Override public void onTextChanged(CharSequence s, int start, int before, int count) { switch (label){ case FACE_LEFT: addSpeaceByLeftValue(s, start, before, count,editText,label); break; case FACE_RIGHT: addSpeaceByRightValue(s, start, before,editText); break; default: //数值计算 setValueCalculate(); break; } } @Override public void afterTextChanged(Editable s) { // LogUtil.e("afterTextChanged="+s.toString()); }}/** * 盘右输入数据格式 * @param s * @param start * @param before * @param editText */private void addSpeaceByRightValue(CharSequence s, int start, int before,EditText editText) { if (s == null || s.length() == 0) return; StringBuilder sb = new StringBuilder(); for (int i = 0; i < s.length(); i++) { if (i != 3 && i != 6 && s.charAt(i) == ' ') { continue; } else { sb.append(s.charAt(i)); if ((sb.length() == 4 || sb.length() == 7) && sb.charAt(sb.length() - 1) != ' ') { sb.insert(sb.length() - 1, ' '); } } } LogUtil.d("sb="+sb+";"+"s="+s.toString()); if (!sb.toString().equals(s.toString())) { int index = start + 1; if (sb.charAt(start) == ' ') { if (before == 0) { index++; } else { index--; } } else { if (before == 1) { index--; } } editText.setText(sb.toString()); editText.setSelection(index); }}/** * 盘左输入数据格式 * @param start * @param before * @param count */private void addSpeaceByLeftValue(CharSequence s, int start, int before, int count,EditText editText,int label) { LogUtil.d("s=" + s + ",start=" + start + ",before=" + before + ",count=" + count + ",s.length="+s.length()); if (s == null) { return; } //判断是否是在中间输入,需要重新计算 boolean isMiddle = (start + count) < (s.length()); //在末尾输入时,是否需要加入空格 boolean isNeedSpace = false; if (!isMiddle && s.length() > 0 && s.length() % 3 == 0) { isNeedSpace = true; } if (isMiddle || isNeedSpace) { String newStr = s.toString(); //将空格替换为空字符串 newStr = newStr.replace(" ", ""); LogUtil.d("newStr="+newStr+";"+"newStr.length()="+newStr.length()); StringBuilder sb = new StringBuilder(); if (label==FACE_LEFT) { //每两个字符加一个空格 for (int i = 0; i < newStr.length(); i += 2) { if (i > 0) { sb.append(" "); } if (i + 2 <= newStr.length()) { sb.append(newStr.substring(i, i + 2)); } else { sb.append(newStr.substring(i, newStr.length())); } } } LogUtil.d("sb="+sb); //editText.removeTextChangedListener(watcher); editText.setText(sb); //如果是在末尾的话,或者加入的字符个数大于零的话(输入或者粘贴) if(!isMiddle || count > 1){ editText.setSelection(sb.length()); } else if (isMiddle) { boolean flag1; //删除标记 boolean flag2;//增加标记 //如果是删除 if (count == 0) { flag1 = (start - before + 1) % 5 == 0; //如果删除时,光标停留在空格的前面,光标则要往前移一位 if (flag1) { editText.setSelection((start - before) > 0 ? start - before : 0); } else { editText.setSelection((start - before + 1) > sb.length() ? sb.length() : (start - before + 1)); } } else {//如果是增加 flag2 = (start - before + count) % 5 == 0; if (flag2) { editText.setSelection((start + count - before + 1) < sb.length() ? (start + count - before + 1) : sb.length()); } else { editText.setSelection(start + count - before); } } } //editText.addTextChangedListener(watcher); }}
阅读全文
0 0
- EditText两个数字自动加空格
- Android EditText添加数字自动加空格显示
- 文本框数字每4位自动加空格分隔
- 文本框数字每4位自动加空格分隔
- EditText四位自动空格
- android EditText 银行卡4位加空格
- EditText输入手机号自动带空格
- EditTExt 输入完成之后自动加东西
- 输入两个数字 中间用空格隔开
- Android 之 Edittext输入四位自动空格
- Android开发之EditText输入手机号自动带空格
- Android 实现EditText输入数字时每三位加逗号
- Edge浏览器自动给数字加下划线
- IE / Edge 自动给数字加下划线
- IOS 银行卡每输入4位自动加空格
- JS输入银行卡号,4位自动加空格
- 输入银行卡号,每四位自动加一个空格
- 银行卡输入每4位自动加空格
- java类加载的过程
- 孝感蛋糕
- Codeforces 834(426 Div.2) C.The Meaningless Game
- 一个能将给定非负整数数组中的数字排列成最大数字的函数(数组元素长度随机)
- sublime如何用正则选择用逗号分隔的几段并且替换修改
- EditText两个数字自动加空格
- SniperOJ-CTF练习-web
- Linux入门,这七大习惯得有!
- JDBC的批量插入
- Oracle SQL性能优化 SQL优化
- C++集合操作之集合交集:std::set_intersection
- vim插件管理器Vundle的安装及使用
- 新建workspace时new只有JPA
- HDU 5883 The Best Path(欧拉通路与欧拉回路)