android EditText输入金额,限制位数和显示小数点后几位
16lz
2021-01-23
android很多项目都会有输入框,还有输入框的限制,下面给出参考,总结别的文章的 ,
自己做出记录和分享
public class CashierInputFilter implements InputFilter {
Pattern mPattern;
//输入的最大金额/** * java int 类整数的最大值是 2 的 31 次方 - 1 = 2147483648 - 1 = 2147483647 可以用 Integer.MAX_VALUE 表示它,即 int value = Integer.MAX_VALUE; */private static final int MAX_VALUE = Integer.MAX_VALUE;//小数点后的位数private static final int POINTER_LENGTH = 8;private static final String POINTER = ".";private static final String ZERO = "0";public CashierInputFilter() { /** * 正则表达式,表示匹配0-9的数字和. */ mPattern = Pattern.compile("([0-9]|\\.)*");}/** * @param source 新输入的字符串 * @param start 新输入的字符串起始下标,一般为0 * @param end 新输入的字符串终点下标,一般为source长度-1 * @param dest 输入之前文本框内容 * @param dstart 原内容起始坐标,一般为0 * @param dend 原内容终点坐标,一般为dest长度-1 * @return 输入内容 */@Overridepublic CharSequence filter(CharSequence source, int start, int end, Spanned dest, int dstart, int dend) { String sourceText = source.toString(); String destText = dest.toString(); //验证删除等按键 if (TextUtils.isEmpty(sourceText)) { return ""; } Matcher matcher = mPattern.matcher(source); //已经输入小数点的情况下,只能输入数字 if(destText.contains(POINTER)) { if (!matcher.matches()) { return ""; } else { if (POINTER.equals(source.toString())) { //只能输入一个小数点 return ""; } } /** * 验证小数点精度,保证小数点后只能输入{@link POINTER_LENGTH}位 */ int index = destText.indexOf(POINTER); int length = dend - index; if (length > POINTER_LENGTH) { return dest.subSequence(dstart, dend); } } else { /** * 没有输入小数点的情况下,只能输入小数点和数字 * 1. 首位不能输入小数点 * 2. 如果首位输入0,则接下来只能输入小数点了 */ if (!matcher.matches()) { return ""; } else { if ((POINTER.equals(source.toString())) && TextUtils.isEmpty(destText)) { //首位不能输入小数点 return ""; } else if (!POINTER.equals(source.toString()) && ZERO.equals(destText)) { //如果首位输入0,接下来只能输入小数点 return ""; } } } //验证输入金额的大小 double sumText = Double.parseDouble(destText + sourceText); /** * 这里判断最大输入的值 */// if (sumText > MAX_VALUE) {// return dest.subSequence(dstart, dend);// } return dest.subSequence(dstart, dend) + sourceText;}}
上面就是一个输入的过滤器,下面就是使用方法
editText = (EditText) findViewById(R.id.editText);
设置金额输入的过滤器,保证只能输入金额类型 小数点后几位是自己设置的{@link CashierInputFilter.POINTER_LENGTH}
InputFilter[] filters = {new CashierInputFilter()};
editText.setFilters(filters);
GItHub上面有个demo欢迎下载 LimitEditText
更多相关文章
- android 金额输入限制,EditText保留两位小数
- Android 保留两位小数点的4种方法
- DecimalFormat 实现保留小数点位数及四舍五入
- Android 浮点型当小数点后为0时自动去掉
- Android 限制EditText输入小数点后面位数
- Android EditText保留小数点后两位
- c语言float类型小数点后有几位有效数字?
- PHP 如何处理金额
- 老大说:谁要再用double定义商品金额,就自己收拾东西走