【发布时间】:2020-02-28 09:12:04
【问题描述】:
我使用 InputFilter 从 stackoverflow 复制代码以强制编辑文本在“。”之前有 3 位数字。和后面的 2 位数字(2 位小数)。但是,如果用户只输入 15,我希望系统显示 15.00?
所以我想要的场景是.. 编辑文本最多必须有 2 个小数位.. 例如12.56 但如果用户只输入 15 则编辑文本字段最后添加 2 个零,因此 15 -> 15.00
如何在 addTextChangedListener 中执行此操作?
stackoverflow 中关于 inputfilter 的代码
public class DecimalDigitsInputFilter implements InputFilter {
Pattern mPattern;
public DecimalDigitsInputFilter(int digitsBeforeZero,int digitsAfterZero) {
mPattern=Pattern.compile("[0-9]{0," + (digitsBeforeZero-1) + "}+((\\.[0-9]{0," + (digitsAfterZero-1) + "})?)||(\\.)?");
}
@Override
public CharSequence filter(CharSequence source, int start, int end, Spanned dest, int dstart, int dend) {
String s = Html.toHtml(dest).replaceAll("\\<.*?>","").replaceAll("\n","");
Matcher matcher = mPattern.matcher(dest);
if (!matcher.matches())
return "";
try {
if(Double.parseDouble(s)<9999.99 && s.contains(".")) {
return null;
}else if ((Double.parseDouble(s)<1000 && !s.contains("."))||source.equals(".")) {
return null;
}else {
return "";
}
}catch (Exception e) {
e.printStackTrace();
}
return null;
}
}
/// in main activity
numberReceivedEditText.setFilters(new InputFilter[]{new DecimalDigitsInputFilter(3, 2)});
numberReceivedEditText.addTextChangedListener(new TextWatcher() {
@Override
public void beforeTextChanged(CharSequence s, int start, int count, int after) {
}
@Override
public void onTextChanged(CharSequence s, int start, int before, int count) {
}
@Override
public void afterTextChanged(Editable s) {
}
});
【问题讨论】:
-
可以分享一下sn-p的代码吗?
-
刚刚发布了代码
标签: android android-edittext addtextchangedlistener