图片发自简书App
输入手机号时,为了看着更加方便可能会显示成xxx xxxx xxxx,如图
为了这个需求,自己简单的研究了一下,写了个这个小东西自己练练思维
简单来看就是按照3-4-4来分割,通过添加addTextChangedListener()就能获得文本修改的值,可以在afterTextChanged(Editable s)方法中处理就行了,主要就是在对应的位置添加分隔符就OK了
private StringBuffer mStringBuffer = new StringBuffer();
/** 分割符 */
private char separator = ' ';
/** 分割符插入位置规则 */
private int[] RULES = {3, 4, 4};
@Override
public void afterTextChanged(Editable s) {
if (!TextUtils.equals(s, mStringBuffer)) {
mStringBuffer = new StringBuffer();
for (int i = 0, length = s.length(); i < length; i++) {
char c = s.charAt(i);
if (c != separator) {
mStringBuffer.append(c);
}
int standardPos = 0;
int offset = 0;
for (int pos : RULES) {
standardPos += pos + offset++;
if (mStringBuffer.length() == standardPos) {
mStringBuffer.append(separator);
break;
}
}
}
editText.setText(mStringBuffer);
}
}
这些代码基本已经实现了主要功能,但是还有不少小问题,例如:
光标的位置问题
空格删除问题
……
后续再处理这些问题的过程中进行了一些优化,还扩展了一些使用方式,最终是以实现TextWatcher的方式来封装的,不说废话,上代码
public class AutoSeparateTextWatcher implements TextWatcher {
/***/
private StringBuffer mStringBuffer = new StringBuffer();
/** 分割符 */
private char separator = ' ';
/** 分割符插入位置规则 */</