import android.text.InputFilter; import android.text.Spanned; import java.util.regex.Matcher; import java.util.regex.Pattern; /** * joy on 2015/12/17. * * 金額輸入格式 */ public class EditInputFilter implements InputFilter { /** * 最大數字,我們取int型最大值 */ public static final int MAX_VALUE = 2147483647; /** * 小數點後的數字的位數 */ public static final int PONTINT_LENGTH = 2; Pattern p; public EditInputFilter(){ p = Pattern.compile(“[0-9]*”); //除數字外的其他的 } /** * source 新輸入的字符串 * start 新輸入的字符串起始下標,一般爲0 * end 新輸入的字符串終點下標,一般爲source長度-1 * dest 輸入之前文本框內容 * dstart 原內容起始座標,一般爲0 * dend 原內容終點座標,一般爲dest長度-1 */ @Override public CharSequence filter(CharSequence src, int start, int end, Spanned dest, int dstart, int dend) { String oldtext = dest.toString(); System.out.println(oldtext); //驗證刪除等按鍵 if (“”.equals(src.toString())) { return null; } //驗證非數字或者小數點的情況 Matcher m = p.matcher(src); if(oldtext.contains(“.”)){ //已經存在小數點的情況下,只能輸入數字 if(!m.matches()){ return null; } }else{ //未輸入小數點的情況下,可以輸入小數點和數字 if(!m.matches() && !src.equals(“.”) ){ return null; } } //驗證輸入金額的大小 if(!src.toString().equals(“”)){ double dold = Double.parseDouble(oldtext+src.toString()); if(dold > MAX_VALUE){ return dest.subSequence(dstart, dend); }else if(dold == MAX_VALUE){ if(src.toString().equals(“.”)){ return dest.subSequence(dstart, dend); } } } //驗證小數位精度是否正確 if(oldtext.contains(“.”)){ int index = oldtext.indexOf(“.”); int len = dend – index; //小數位只能2位 if(len > PONTINT_LENGTH){ CharSequence newText = dest.subSequence(dstart, dend); return newText; } } return dest.subSequence(dstart, dend) +src.toString(); } }
InputFilter[] filters = { new EditInputFilter() };
edit_takeout_money.setFilters(filters);