EditText两个数字自动加空格

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
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值