我正在尝试编写一个应用程序来帮助您管理财务。我正在使用 EditText
用户可以在其中指定金额的字段。
我将 inputType
设置为 numberDecimal
工作正常,除了这允许人们输入诸如 123.122
类的数字,这不是钱的完美选择。
有没有办法将小数点后的字符数限制为两个?
原文由 Konstantin Weitz 发布,翻译遵循 CC BY-SA 4.0 许可协议
我正在尝试编写一个应用程序来帮助您管理财务。我正在使用 EditText
用户可以在其中指定金额的字段。
我将 inputType
设置为 numberDecimal
工作正常,除了这允许人们输入诸如 123.122
类的数字,这不是钱的完美选择。
有没有办法将小数点后的字符数限制为两个?
原文由 Konstantin Weitz 发布,翻译遵循 CC BY-SA 4.0 许可协议
更优雅的方法是使用正则表达式 (regex),如下所示:
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) {
Matcher matcher=mPattern.matcher(dest);
if(!matcher.matches())
return "";
return null;
}
}
要使用它,请执行以下操作:
editText.setFilters(new InputFilter[] {new DecimalDigitsInputFilter(5,2)});
原文由 Asaf Pinhassi 发布,翻译遵循 CC BY-SA 3.0 许可协议
15 回答8.4k 阅读
8 回答6.2k 阅读
1 回答4k 阅读✓ 已解决
3 回答2.2k 阅读✓ 已解决
2 回答3.1k 阅读
2 回答3.8k 阅读
3 回答1.7k 阅读✓ 已解决
InputFilter
的这个实现解决了这个问题。