Android开发输金额EditText输入控制

在输入金额时,应该对输入的内容进行格式化,比如小数点后最多有两位小数点(最小单位为 “分”),不能以"."或多个零开头等。


方法:.给EditText加上输入过滤器

  InputFilter[] filters={new CashierInputFilter()};
        etAmountShishou.setFilters(filters);

/**
     * 输入过滤器
     */
    public class CashierInputFilter implements InputFilter {
        Pattern mPattern;
        //输入的最大金额
        private static final int MAX_VALUE = Integer.MAX_VALUE;
        //小数点后的位数
        private static final int POINTER_LENGTH = 1;
        private static final String POINTER = ".";
        private static final String ZERO = "0";
        public CashierInputFilter() {
            mPattern = Pattern.compile("([0-9]|\\.)*");
        }
        /**
         * @param source    新输入的字符串
         * @param start     新输入的字符串起始下标,一般为0
         * @param end       新输入的字符串终点下标,一般为source长度-1
         * @param dest      输入之前文本框内容
         * @param dstart    原内容起始座标,一般为0
         * @param dend      原内容终点座标,一般为dest长度-1
         * @return          输入内容
         */
        @Override
        public 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)) {  //只能输入一个小数点
                        return "";
                    }
                }
                //验证小数点精度,保证小数点后只能输入1位
                int index = destText.indexOf(POINTER);
                int length = dend - index;
                if (length > POINTER_LENGTH) {
                    return dest.subSequence(dstart, dend);
                }
            } else {
                //没有输入小数点的情况下,只能输入小数点和数字,但首位不能输入小数点和0
                if (!matcher.matches()) {
                    return "";
                } else {
                    if ((POINTER.equals(source)) && TextUtils.isEmpty(destText)) {
                        return "";
                    }
                    //如果首位为“0”,则只能再输“.”
                    if(ZERO.equals(destText)){
                        if(!POINTER.equals(sourceText)){
                            return "";
                        }
                    }
                }
            }
            //验证输入金额的大小
            double sumText = Double.parseDouble(destText + sourceText);
            if (sumText > MAX_VALUE) {
                return dest.subSequence(dstart, dend);
            }
            return dest.subSequence(dstart, dend) + sourceText;
        }
    }




發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章