我们可能面临这样的需求EditText输入限制n位整数,n位小数。有些产品,提出了整数要根据三个数来加逗号。笔者也是找了半天没有找到太好的工具类,于是自己封装了一个。
实现功能:
1.3位自动加逗号
2.自定义限制输入位数
3.支持在串的任意位置增加,修改,删除。
4.对空和有内容进行回调封装
5.对输入结束后进行回调封装
使用方法:
//10位整数两位小数
EditTextTools editTextTools= new EditTextTools(mEditText,10,2);
如果需要45两个需求的回调:
editTextTools.setOnEmptyListener(new EditTextTools.OnEmptyListener() {
@Override
public void onEmpty() {
}
@Override
public void onNoEmpty() {
}
});
editTextTools.setOnBeforeAfterChangedListener(new EditTextTools.OnBeforeAfterChangedListener() {
@Override
public void onBeforeAfterChanged(String s) {
}
});
解释一下45两个需求为什么会存在,
4因为我们可能对数字采用特殊字体等,但是如果有hint那么汉字是没有被加入特殊字体库的,所以空的时候就用默认字体,有输入可能用特殊的自定义字体(一套数字英文自定义字体文件大小还是可以接受的)。
5我们输入的数据可能会想实时保存下来那我我们可能需要对串中的逗号进行剔除等,所以定义了这个借口。
然后我们罗列一下几个难点:
1.输入修改位置计算,因为我们可能自己增加逗号进去,所以位置可能会错乱。
2.如何避免多次回调TextWatcher
3.如何处理好数字串的限制长度和增加字符
12可能都是Android的一些技巧,
1.通过onTextChanged(CharSequence s, int start, int before, int count)
几个回调的值,来处理setSelection。
2.我们在给EditText赋值text时候解除监听,赋值后继续添加监听