Как установить десятичное число с помощью InputFilter Android Studio - PullRequest
2 голосов
/ 02 июля 2019

Я делаю приложение, которое может контролировать вес (килограмм). У меня есть 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. спасибо!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...