Как установить тип и формат ввода в EditText, используя kotlin? - PullRequest
0 голосов
/ 13 декабря 2018

Я хочу заставить пользователей ввести число, и я использую его (и он работает нормально):

android:inputType="number"

Я хочу заставить пользователя ввести только два числа (Int илиDouble не имеет значения), и эти числа должны быть в диапазоне от 0 до 20 (или от 0,0 до 20,0): например, 0 или 0,0, 1 или 1,5 (1,0 и т. Д.).,,20 или 20,0

Ответы [ 2 ]

0 голосов
/ 13 декабря 2018

Вот как мне нравится это делать:

добавить это для редактирования текста

 android:inputType="numberDecimal"  

(или)

android:digits="0123456789."

Kotlin ::

class InputFilterMinMax(min:Float, max:Float): InputFilter {
    private var min:Float = 0.0F
    private var max:Float = 0.0F

    init{
        this.min = min
        this.max = max
    }

    override fun filter(source:CharSequence, start:Int, end:Int, dest: Spanned, dstart:Int, dend:Int): CharSequence? {
        try
        {
            val input = (dest.subSequence(0, dstart).toString() + source + dest.subSequence(dend, dest.length)).toFloat()
            if (isInRange(min, max, input))
                return null
        }
        catch (nfe:NumberFormatException) {}
        return ""
    }

    private fun isInRange(a:Float, b:Float, c:Float):Boolean {
        return if (b > a) c in a..b else c in b..a
    }
}

Затем установите фильтр на свой EditText:

myEditText.setFilters(arrayOf<InputFilter>(InputFilterMinMax(0.0F, 20.0F)))

Java:

public class InputFilterMinMax implements InputFilter {
    private float min;
    private float max;

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

    @Override
    public CharSequence filter(CharSequence source, int start, int end, Spanned dest, int dstart, int dend) {
        //noinspection EmptyCatchBlock
        try {
            float input = Float.parseFloat(dest.subSequence(0, dstart).toString() + source + dest.subSequence(dend, dest.length()));
            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:

myEditText.setFilters(new InputFilter[]{new InputFilterMinMax(0.0, 20.0)});
0 голосов
/ 13 декабря 2018

Использование TextWatcher

Документы для Android - TEXT WATCHER

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