我是android编程的新手。我创建了一个材料应用程序,用户可以跟踪他们的重量。 (P.S)我有用于输入值的edittext。我已经尝试制作两个输入过滤器,但它们无法正常工作:
他们的代码:
editText.setFilters(new InputFilter[] {new InputFilterMinMax(1,140)});
editText.setFilters(new InputFilter[] {new DecimalDigitsInputFilter(1)});
public class DecimalDigitsInputFilter implements InputFilter {
private final int decimalDigits;
/**
* Constructor.
*
* @param decimalDigits maximum decimal digits
*/
public DecimalDigitsInputFilter(int decimalDigits) {
this.decimalDigits = decimalDigits;
}
@Override
public CharSequence filter(CharSequence source,
int start,
int end,
Spanned dest,
int dstart,
int dend) {
int dotPos = -1;
int len = dest.length();
for (int i = 0; i < len; i++) {
char c = dest.charAt(i);
if (c == '.' || c == ',') {
dotPos = i;
break;
}
}
if (dotPos >= 0) {
// protects against many dots
if (source.equals(".") || source.equals(","))
{
return "";
}
// if the text is entered before the dot
if (dend <= dotPos) {
return null;
}
if (len - dotPos > decimalDigits) {
return "";
}
}
return null;
}
}
public class InputFilterMinMax implements InputFilter {
private int min, max;
public InputFilterMinMax(int min, int max) {
this.min = min;
this.max = max;
}
@Override
public CharSequence filter(CharSequence source, int start, int end, Spanned dest, int dstart, int dend) {
try {
int input = Integer.parseInt(dest.toString() + source.toString());
if (isInRange(min, max, input))
return null;
} catch (NumberFormatException nfe) { }
return "";
}
private boolean isInRange(int a, int b, int c) {
return b > a ? c >= a && c <= b : c >= b && c <= a;
}
}
使用该代码,用户可以根据需要在小数点前输入任意数字,但小数点后只能输入一个符号。 E. g。:他可以输入145.6,2452.5,54356.5,34523423.5。
我想允许用户只输入小数点前的数字1-140,但小数点后只能输入一个符号:86.5,45.7,99.9,112.4,140.0。
请帮我改变我的代码
答案 0 :(得分:0)
试试这个:
InputFilter NumberDecimalFilter = new InputFilter() {
public CharSequence filter(CharSequence source, int start, int end,
Spanned dest, int dstart, int dend) {
int dots = 0;
int numbersAfterDot = 0;
for (int i = start; i < end; i++) {
if (!Character.isDigit(source.charAt(i)) && source.charAt(i) != '.') {
return "";
}else{
if(source.charAt(i) == '.'){
if(dots > 0 || i == 0){
return "";
}else{
dots ++;
}
}else{
if(dots > 0 && numbersAfterDot > 0){
return "";
}else{
if(dots > 0){
numbersAfterDot ++;
}
}
}
}
}
return null;
};
editText.setFilters(new InputFilter[] { NumberDecimalFilter });
检查小数部分的范围和大小我建议你使用edittext.gettext()。toString和Double.parseDouble()但是你不能输入超过1的小数而你只能输入数字而且只能输入数字一点一点