android edittext限制輸入小數位數,限制輸入數字大小


public class CashierInputFilter implements InputFilter {  
    Pattern mPattern;  
  
    //輸入的最大金額  
    private static final int MAX_VALUE = Integer.MAX_VALUE;  
    //小數點后的位數  
    private static final int POINTER_LENGTH = 2;  
  
    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 "";  
                }  
            }  
  
            //驗證小數點精度,保證小數點后只能輸入兩位  
            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) || ZERO.equals(source)) && TextUtils.isEmpty(destText)) {  
                    return "";  
                }  
            }  
        }  
  
        //驗證輸入金額的大小  
        double sumText = Double.parseDouble(destText + sourceText);  
        if (sumText > MAX_VALUE) {  
            return dest.subSequence(dstart, dend);  
        }  
  
        return dest.subSequence(dstart, dend) + sourceText;  
    }  
}  

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM