Я делаю приложение, которое может контролировать вес (килограмм).
У меня есть edittext, который может принять ввод десятичных чисел, используя:
et_beratbadan.setInputType(InputType.TYPE_CLASS_NUMBER | InputType.TYPE_NUMBER_FLAG_DECIMAL | InputType.TYPE_NUMBER_FLAG_SIGNED);
мой текст редактирования уже может ограничивать ввод чисел, 3 цифры до нуля и 1 цифра после нуля (120,1), используя:
et_beratbadan.setFilters(new InputFilter[]{new DecimalDigitsInputFilter(3, 1)});
я хочу, чтобы мой текст редактирования мог ограничивать ввод чисел, 3 цифры до нуля и 1 цифру после нуля, не принимать минус значения и начинаться с единицы.
так что это позволило бы: 123,4, 12,3, 1,2
не допускается: 0, -12,3, 0,1
Я уже пробовал код из https://stackoverflow.com/a/38793820, чтобы мой текст редактирования не принимал минус значения. и какой-то другой код, что я потерял ссылку на него.
и у меня есть класс для ввода inputfilter:
public class DecimalDigitsInputFilter implements InputFilter {
private int mDigitsBeforeZero;
private int mDigitsAfterZero;
private Pattern mPattern;
private static final int DIGITS_BEFORE_ZERO_DEFAULT = 100;
private static final int DIGITS_AFTER_ZERO_DEFAULT = 100;
public DecimalDigitsInputFilter(Integer digitsBeforeZero, Integer digitsAfterZero) {
this.mDigitsBeforeZero = (digitsBeforeZero != null ? digitsBeforeZero : DIGITS_BEFORE_ZERO_DEFAULT);
this.mDigitsAfterZero = (digitsAfterZero != null ? digitsAfterZero : DIGITS_AFTER_ZERO_DEFAULT);
mPattern = Pattern.compile("-?[0-9]{0," + (mDigitsBeforeZero) + "}+((\\.[0-9]{0," + (mDigitsAfterZero)
+ "})?)||(\\.)?");
}
@Override
public CharSequence filter(CharSequence source, int start, int end, Spanned dest, int dstart, int dend) {
String replacement = source.subSequence(start, end).toString();
String newVal = dest.subSequence(0, dstart).toString() + replacement
+ dest.subSequence(dend, dest.length()).toString();
Matcher matcher = mPattern.matcher(newVal);
if (matcher.matches())
return null;
if (TextUtils.isEmpty(source))
return dest.subSequence(dstart, dend);
else
return "";
}
* *} Тысяча двадцать-один
Извините, я все еще изучаю английский и Java. спасибо!