public static InputFilter get2NumPoint(final int DECIMAL_DIGITS,final int MAX_LENGTH){
InputFilter lengthfilter = new InputFilter() {
public CharSequence filter(CharSequence source, int start, int end,
Spanned dest, int dstart, int dend) {
// 删除等特殊字符,直接返回
if (nullFilter(source)) return null;
String dValue = dest.toString();
String[] splitArray = dValue.split("\\.");//在点前后分开两段
if(splitArray.length>0){
String intValue=splitArray[0];
int errorIndex=dValue.indexOf(".");
if(errorIndex==-1){
errorIndex=dValue.length();
}
if(intValue.length()>=MAX_LENGTH-DECIMAL_DIGITS-1&&dstart<=errorIndex){
if(".".equals(source.toString())){
return null;
}
return "";
}
}
if (splitArray.length > 1&&dstart==dValue.length()) {
String dotValue = splitArray[1];
int diff = dotValue.length() + 1 - DECIMAL_DIGITS;
if (diff > 0) {
try {
return source.subSequence(start, end - diff);
} catch (IndexOutOfBoundsException e) {
return source;
}
}
}
if(dest.length()==MAX_LENGTH-1&&".".equals(source.toString())){
return "";
}
if(dest.length()>=MAX_LENGTH){
return "";
}
return null;
}
};
return lengthfilter;
InputFilter lengthfilter = new InputFilter() {
public CharSequence filter(CharSequence source, int start, int end,
Spanned dest, int dstart, int dend) {
// 删除等特殊字符,直接返回
if (nullFilter(source)) return null;
String dValue = dest.toString();
String[] splitArray = dValue.split("\\.");//在点前后分开两段
if(splitArray.length>0){
String intValue=splitArray[0];
int errorIndex=dValue.indexOf(".");
if(errorIndex==-1){
errorIndex=dValue.length();
}
if(intValue.length()>=MAX_LENGTH-DECIMAL_DIGITS-1&&dstart<=errorIndex){
if(".".equals(source.toString())){
return null;
}
return "";
}
}
if (splitArray.length > 1&&dstart==dValue.length()) {
String dotValue = splitArray[1];
int diff = dotValue.length() + 1 - DECIMAL_DIGITS;
if (diff > 0) {
try {
return source.subSequence(start, end - diff);
} catch (IndexOutOfBoundsException e) {
return source;
}
}
}
if(dest.length()==MAX_LENGTH-1&&".".equals(source.toString())){
return "";
}
if(dest.length()>=MAX_LENGTH){
return "";
}
return null;
}
};
return lengthfilter;
}
第一个参数是小数部分的位数,第二个参数是总长度(包括小数点)
private static boolean nullFilter(CharSequence source) {
if ("".equals(source.toString())) {
return true;
}
return false;
}