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);    }}
原创粉丝点击