遇到一需求,要限制EditText小数点输入位数,最后经过查阅资料,实现方法如下:
①xml中限制输入的类型:
android:inputType="numberDecimal"
②重写InputFilter
public class DecimalDigitsInputFilter implements InputFilter { private final int decimalDigits; /** * Constructor. * * @param decimalDigits maximum decimal digits */ public DecimalDigitsInputFilter(int decimalDigits) { this.decimalDigits = decimalDigits; } @Override public CharSequence filter(CharSequence source, int start, int end, Spanned dest, int dstart, int dend) { int dotPos = -1; int len = dest.length(); for (int i = 0; i < len; i++) { char c = dest.charAt(i); if (c == '.' || c == ',') { dotPos = i; break; } } if (dotPos >= 0) { // protects against many dots if (source.equals(".") || source.equals(",")) { return ""; } // if the text is entered before the dot if (dend <= dotPos) { return null; } if (len - dotPos > decimalDigits) { return ""; } } return null; } }
③设置小数点位数,这里传进去的是2位
etInvoiceAmount.setFilters(new InputFilter[] {new DecimalDigitsInputFilter(2)});