azerphoenix
@azerphoenix
Java Software Engineer

Как ограничить диапазон чисел с 10 по 50 для editext?

Здравствуйте!
Задался вопросом об ограничении диапазона вводимых чисел для компонента EditText.
И нашел решение:
public class InputFilterMinMax implements InputFilter {

    private int min, max;

    public InputFilterMinMax(int min, int max) {
        this.min = min;
        this.max = max;
    }

    public InputFilterMinMax(String min, String max) {
        this.min = Integer.parseInt(min);
        this.max = Integer.parseInt(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;
    }
}


ageField.setFilters(new InputFilter[]{new InputFilterMinMax("10","50")});


<EditText
            android:id="@+id/age_field"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:ems="10"
            android:inputType="number"
            android:layout_gravity="center"
            android:layout_margin="10dp"/>


Однако, после сборки проекта, в поле вообще ничего невозможно ввести. В чем проявляется моя ошибка?
Источник - blog.adeel.io/2016/09/11/inputfilter-used-on-andro...

Этот вариант работает только, если число (минимальное) - 1, а если минимальное число поставить 10 или любое другое число, то не отрабатывает...

Заранее спасибо за помощь!
  • Вопрос задан
  • 282 просмотра
Решения вопроса 1
azerphoenix
@azerphoenix Автор вопроса
Java Software Engineer
Решение -
public class InputFilterMinMax implements InputFilter {

    private int min, max;

    public InputFilterMinMax(int min, int max) {
        this.min = min;
        this.max = max;
    }

    public InputFilterMinMax(String min, String max) {
        this.min = Integer.parseInt(min);
        this.max = Integer.parseInt(max);
    }



    @Override
    public CharSequence filter(CharSequence source, int start, int end, Spanned dest, int dstart, int dend) {
        try {
            String prefix = dest.toString().substring(0, dstart);
            String insert = source.toString();
            String suffix = dest.toString().substring(dend);
            String input_string = prefix + insert + suffix;
            int input = Integer.parseInt(input_string);

            if (isInRange(min, max, input) || input_string.length() < String.valueOf(min).length())
                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;
    }

}
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы