金額輸入框

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


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