EditText两个数字自动加空格
2017-07-31 08:47
232 查看
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 4000 , 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); } }
相关文章推荐
- EditText 限制只能输入字母和数字,并且字母自动大写
- edittext只能输入数字和小数点时并且小数点后只能输入两个小数
- android EditText里面嵌入两个按钮,通过按钮可以加减EditText里的数字,组合自定义控件。
- Android开发之EditText输入手机号自动带空格
- 如何不让EditText不自动获取焦点以及EditText只能输入数字
- EditText输入手机号自动带空格
- EditText每四位自动添加空格或者横线(银行卡输入格式,验券格式)
- Android之EditText设置长度限制提示和自动添加空格
- 自动格式化银行卡号的EditText,每四位增加一个空格,并根据银行卡号判断该银行卡归属的银行及卡别
- android EditText里面嵌入两个按钮,通过按钮可以加减EditText里的数字,组合自定义控件。
- EditText输入手机号自动带空格
- AlertDialog中EditText不能获取焦点以及不宽度不能自动铺满的完美解决方案
- EditText添加输入数字范围限制
- Android中EditText限制仅允许输入汉字/仅允许汉字和数字
- Android下edittext限制文本指定位置数字不能超出多少
- EditText焦点自动带出软键盘问题
- android studio实现页面跳转后edittext获取焦点自动打开软键盘
- 限定EditText只能输入数字
- unity Text文本输入中文空格自动换行
- EditText不能输入空格且回车搜索