当我们监听数据变化后再相应的位置新增符号,发现无法删除,所以有了下面的方法
我下面是监听400||800电话,每三位添加"-":例如400-855-8574
但是当我发现删除的时候到第七位就无法删除了,应该监听到第七位删除后有自动添加"-"了导致肉眼感觉到没有删除的假象
etSafeAfterNumber.addTextChangedListener(new TextWatcher() {
@Override
public void beforeTextChanged(CharSequence s, int start, int count, int after) {
//监听之前的长度
beforeLength = s.toString().length();
}
@Override
public void onTextChanged(CharSequence s, int start, int before, int count) {
}
@Override
public void afterTextChanged(Editable s) {
//判断是否为400||800开头电话
if (TextUtils.isEmpty(s.toString())) {
return;
}
//监听变化后的长度
int afterLength = s.toString().length();
if (s.toString().startsWith("400") || s.toString().startsWith("800")) {
if (beforeLength < afterLength) {
//判断之前的长度小于变化后的长度才走添加"-",否则走正常删除逻辑
etSafeAfterNumber.setFilters(new InputFilter[]{new InputFilter.LengthFilter(12)});
String trim = etSafeAfterNumber.getText().toString().trim();
if (trim.length() == 3) {
etSafeAfterNumber.setText(new StringBuffer(trim).append("-"));
etSafeAfterNumber.setSelection(trim.length() + 1);
} else if (trim.length() == 7) {
etSafeAfterNumber.setText(new StringBuffer(trim).append("-"));
etSafeAfterNumber.setSelection(trim.length() + 1);
}
}
} else {
etSafeAfterNumber.setFilters(new InputFilter[]{new InputFilter.LengthFilter(11)});
}
}
});