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;
        }
    }




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