android 金额输入限制,EditText保留两位小数
16lz
2021-01-23
我这里介绍两种控制输入方法。
1.(参考链接)
etInputMoney.setFilters(new InputFilter[]{new PointInputFilter()});public class PointInputFilter implements InputFilter { private static final int DECIMAL_DIGITS = 2;//小数的位数 private static final int INTEGER_DIGITS = 6;//整数位的位数 private static final int TOTAL_DIGITS = 9; //整数部分 + “小数点” + 小数部分 private int currentLimitDigits = INTEGER_DIGITS; @Override public CharSequence filter(CharSequence source, int start, int end, Spanned dest, int dstart, int dend) { // 删除等特殊字符,直接返回 if ("".equals(source.toString())) { return null; } /* 如果想要直接禁止复制粘贴多个数字,直接这边限制。 if(source.length() > 1){ return ""; }*/ String dValue = dest.toString(); String[] splitArray = dValue.split("\\."); switch (splitArray.length) { case 1: if (dValue.indexOf(".") != -1) { currentLimitDigits = TOTAL_DIGITS; } else { currentLimitDigits = INTEGER_DIGITS; } if (source.length() > 1) { String sValue = source.toString(); String[] subSplitArray = sValue.split("\\."); switch (subSplitArray.length) { case 1: if (source.length() + dest.length() > currentLimitDigits) { return source.subSequence(0, currentLimitDigits - dest.length()); } break; case 2: String content = ""; if (dstart == dest.length()) { if (subSplitArray[0].length() + dest.length() > INTEGER_DIGITS) { content += subSplitArray[0].subSequence(0, INTEGER_DIGITS - dest.length()); } else { content += subSplitArray[0]; } if (subSplitArray[1].length() > DECIMAL_DIGITS) { content += "."+ subSplitArray[1].substring(0, DECIMAL_DIGITS); } else { content += "."+ subSplitArray[1]; } return content; } else { if (subSplitArray[0].length() + dest.length() > INTEGER_DIGITS) { content += subSplitArray[0].subSequence(0, INTEGER_DIGITS - dest.length()); } else { content += subSplitArray[0]; } } return content; default: break; } } if (splitArray[0].length() >= currentLimitDigits && !".".equals(source.toString())) { return ""; } break; case 2: String integerValue = splitArray[0]; String dotValue = splitArray[1]; int dotIndex = dValue.indexOf("."); if (dstart <= dotIndex) { if (integerValue.length() >= INTEGER_DIGITS) { return ""; } else if (source.length() + integerValue.length() >= INTEGER_DIGITS) { return source.subSequence(0, INTEGER_DIGITS - integerValue.length()); } } else { if (dotValue.length() >= DECIMAL_DIGITS) { return ""; } else if (source.length() + dotValue.length() >= DECIMAL_DIGITS) { return source.subSequence(0, DECIMAL_DIGITS - dotValue.length()); } } break; default: break; } return null; }}
2()
etInputMoney.addTextChangedListener(new TextWatcher() { @Override public void onTextChanged(CharSequence s, int start, int before, int count) { if (s.toString().contains(".")) { if (s.length() - 1 - s.toString().indexOf(".") > 2) { s = s.toString().subSequence(0, s.toString().indexOf(".") + 3); etInputMoney.setText(s); etInputMoney.setSelection(s.length()); } } if (s.toString().trim().substring(0).equals(".")) { s = "0" + s; etInputMoney.setText(s); etInputMoney.setSelection(2); } if (s.toString().startsWith("0") && s.toString().trim().length() > 1) { if (!s.toString().substring(1, 2).equals(".")) { etInputMoney.setText(s.subSequence(0, 1)); etInputMoney.setSelection(1); return; } } } @Override public void beforeTextChanged(CharSequence s, int start, int count, int after) { } @Override public void afterTextChanged(Editable s) { // TODO Auto-generated method stub } });
后面还有手机号码,身份证等的限制,请关注后续文章,或给我留言,我会抽时间补充
更多相关文章
- Android 限制edittext 整数和小数位数 过滤器
- 获取定位数据
- Android 保留两位小数点的4种方法
- DecimalFormat 实现保留小数点位数及四舍五入
- Android Edittext设置负数以及小数
- EditText要求输入整数数字且要从1开始,不能输入0。
- Android 浮点型当小数点后为0时自动去掉
- android号码匹配位数修改
- Android 限制EditText输入小数点后面位数