我想让EditText取十进制值,允许小数点后2位数(可选)。值可以是:
XXXX
xxxx.x
XX.XX
.XX
.X
x.x中
我已经在S / O中尝试了很多解决方案,而且我找到了正确的正则表达式来满足我的解决方案。但没有一个能满足我的要求。某些解决方案符合要求但不允许在小数点之前编辑。假设,当edittext值为.xx时,则无法在小数点(。)之前编辑。
任何人都可以指出正确的解决方案。
N.B。:在EditText中使用maxLength属性。
答案 0 :(得分:1)
试试这个,
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(10, 2) });