您的位置:首页 > 移动开发 > Android开发

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);
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  android