Edittext введите процентное значение меньше 100 и после точки допустимо только две цифры - PullRequest
0 голосов
/ 26 февраля 2019

У меня есть EditText, я использую его для ввода процентного значения.Я поставил ограничение, что пользователь не может ввести значение более 100, и он работает нормально.Мне также разрешено вводить дробную часть в процентах, но разрешать только две цифры после десятичной точки (.), Т.е.время ввести значение и изменить в другом поле.Я попробовал следующий код, чтобы достичь своей цели.

if (title.contains("Deposit")) {
    edt_get_value_popup_value.setInputType(InputType.TYPE_CLASS_NUMBER | InputType.TYPE_NUMBER_FLAG_DECIMAL | InputType.TYPE_NUMBER_FLAG_SIGNED);
    edt_get_value_popup_value.setFilters(new InputFilter[]{new InputFilterMinMax("1", "100")});
}

Я использую класс фильтра для преобразования в проценты, см. Следующий код:

public class InputFilterMinMax implements InputFilter {

   private Float min, max;

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

   public InputFilterMinMax(String min, String max) {
        this.min = Float.parseFloat(min);
        this.max = Float.parseFloat(max);
    }

   @Override
   public CharSequence filter(CharSequence source, int start, int end, Spanned dest, int dstart, int dend) {
       try {
            Float input = Float.parseFloat(dest.toString() + source.toString());
            if (isInRange(min, max, input)) return null;
        } catch (NumberFormatException nfe) {
        }
        return "";
   }

   private boolean isInRange(Float a, Float b, Float c) {
        return b > a ? c >= a && c <= b : c >= b && c <= a;
   }
}

Как установить предел доли доли в EditText?

enter image description here

Ответы [ 2 ]

0 голосов
/ 26 февраля 2019

Вы можете использовать входной фильтр, как показано ниже, после применения некоторых изменений:

 public class InputFilterMinMax implements InputFilter {

    private Float min, max;

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

    public InputFilterMinMax(String min, String max) {
        this.min = Float.parseFloat(min);
        this.max = Float.parseFloat(max);
    }

    @Override
    public CharSequence filter(CharSequence source, int start, int end, Spanned dest, int dstart, int dend) {
        try {
            Float input = Float.parseFloat(dest.toString() + source.toString());
            String inputValue = (dest.toString() + source.toString());
            if (isInRange(min, max, input, inputValue)) return null;
        } catch (NumberFormatException nfe) {
        }
        return "";
    }

    private boolean isInRange(Float min, Float max, Float input, String inputValue) {
        if (inputValue.contains(".") && (inputValue.split("\\.").length > 1)) {
            return (max > min ? input >= min && input <= max : input >= max && input <= min) && (inputValue.split("\\.")[1].length() < 3);
        } else {
            return (max > min ? input >= min && input <= max : input >= max && input <= min);
        }
    }
}
0 голосов
/ 26 февраля 2019

Использовать maxLength свойство edittext,

<EditText
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:hint="Customization"
        android:maxLength="4"
        android:singleLine="true"
        />
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...