我在edittext中像(2015-07)一样自动显示4位数字连字符后实现。我的代码工作正常,但问题是我在4位数值之前删除并再次输入它不起作用。当ed edtext重新输入2015-07到2014-07时,addTextChangedListener不会触发。但是当我使用“/”而不是“ - ”时,我可以重新输入值。有什么问题?
mEdtProductionCode.addTextChangedListener(new TextWatcher() {
int prevL = 0;
@Override
public void beforeTextChanged(CharSequence s, int start, int count, int after) {
prevL = mEdtProductionCode.getText().toString().length();
}
@Override
public void onTextChanged(CharSequence s, int start, int before, int count) {
}
@Override
public void afterTextChanged(Editable s) {
int length = s.length();
if ((prevL < length) && length == 4) {
String data = mEdtProductionCode.getText().toString();
mEdtProductionCode.setText(data + "-");
mEdtProductionCode.setSelection(length + 1);
}
}
});
答案 0 :(得分:0)
您应该在输入第五个字符后将字符检查移动到字符,然后删除String以将自定义字符放在其间:
@Override
public void afterTextChanged(Editable s) {
int length = s.length();
if ((prevL <= length) && length == 5) {
String data = mEditProductionCode.getText().toString();
String beginData = data.substring(0,4);
String endData = Character.toString(data.charAt(length-1));
mEditProductionCode.setText(beginData + "-" + endData);
mEditProductionCode.setSelection(length + 1);
}
}
您还可以使用data.charAt(length-1) != '-'
检查用户是否手动输入短划线,在这种情况下您只需忽略并且不对TextEdit进行更改。