Подтвердить что ты не робот

Как ограничить ввод в EditText цифровым (возможно, десятичным и подписанным)?

Я читал Android: ограничение EditText на номера и Как показать цифровую клавиатуру на EditText в Android?. К сожалению, ни один из них, похоже, не соответствует моим потребностям.

Я хочу ограничить ввод EditText только номерами. Тем не менее, я также хочу разрешить подписанный и/или десятичный ввод.

Вот мой текущий код (мне нужно сделать это программно):

EditText edit = new EditText(this);

edit.setHorizontallyScrolling(true);
edit.setInputType(InputType.TYPE_CLASS_NUMBER);

При этом мой EditText весомо ограничивает все входные данные численными цифрами. К сожалению, он не позволяет ничего другого, например десятичной точки.

Если я изменил эту строку на edit.setInputType(InputType.TYPE_NUMBER_FLAG_DECIMAL), EditText примет все входные данные (это не то, что я хочу...).

Я пробовал комбинировать флаги (в отчаянии, чтобы увидеть, будет ли это работать):

edit.setInputType(InputType.TYPE_CLASS_NUMBER);
edit.setInputType(InputType.TYPE_NUMBER_FLAG_DECIMAL)
edit.setInputType(InputType.TYPE_NUMBER_FLAG_SIGNED)

Это тоже не сработало (EditText принял все входные данные как обычно).

Итак, как мне это сделать?

4b9b3361

Ответ 1

Попробуйте использовать TextView.setRawInputType(), который соответствует атрибуту android:inputType.

Ответ 2

Нет причин использовать setRawInputType(), просто используйте setInputType(). Однако вы должны комбинировать класс и флаги с оператором OR:

edit.setInputType(InputType.TYPE_CLASS_NUMBER | InputType.TYPE_NUMBER_FLAG_DECIMAL | InputType.TYPE_NUMBER_FLAG_SIGNED);

Ответ 3

Лучший способ сделать это программно - использовать следующий метод:

public static DigitsKeyListener getInstance (boolean sign, boolean decimal) 

Возвращает DigitsKeyListener, который принимает цифры от 0 до 9, плюс знак минуса (только в начале) и/или десятичную точку (только по одному для каждого поля), если это указано.

Это решает проблему многих ".". в EditText

editText.setKeyListener(DigitsKeyListener.getInstance(true,true)); // decimals and positive/negative numbers. 

editText.setKeyListener(DigitsKeyListener.getInstance(false,true)); // positive decimals numbers. 

editText.setKeyListener(DigitsKeyListener.getInstance(false,false)); // positive integer numbers.

editText.setKeyListener(DigitsKeyListener.getInstance(true,false)); // positive/negative integer numbers.

Ответ 4

Использовать этот. Работает отлично

input.setInputType(InputType.TYPE_CLASS_NUMBER | InputType.TYPE_NUMBER_FLAG_DECIMAL | InputType.TYPE_NUMBER_FLAG_SIGNED);
input.setKeyListener(DigitsKeyListener.getInstance("0123456789"));

РЕДАКТИРОВАТЬ

версия kotlin

fun EditText.onlyNumbers() {
    inputType = InputType.TYPE_CLASS_NUMBER or InputType.TYPE_NUMBER_FLAG_DECIMAL or
        InputType.TYPE_NUMBER_FLAG_SIGNED
    keyListener = DigitsKeyListener.getInstance("0123456789")
}

Ответ 5

поместите эту строку в xml

 android:inputType="number|numberDecimal"

Ответ 6

Привет, У меня также была эта проблема. Я использую С# с Xamarin

Небольшое замечание, что я надеюсь, что и кто-то другой.

Я попробовал несколько методов, упомянутых здесь.

edittext1.SetRawInputType(Android.Text.InputTypes.ClassNumber | Android.Text.InputTypes.NumberFlagDecimal);

был самым близким, но все еще не работал. Как упоминал Ральф, вы можете использовать

edit.setInputType(InputType.TYPE_CLASS_NUMBER | InputType.TYPE_NUMBER_FLAG_DECIMAL | InputType.TYPE_NUMBER_FLAG_SIGNED);

Однако в моем С# у меня этого не было. вместо этого вы делаете это следующим образом:

edittext1.InputType = Android.Text.InputTypes.ClassNumber | Android.Text.InputTypes.NumberFlagDecimal;

Обратите внимание, что ПРИКАЗАТЬ это важно. Если вы сначала поместите десятичный знак, он все равно позволит вам набирать любые символы, где If Numer сначала будет только числовым, но позволяет децимальный разделитель!

Ответ 7

EditText edit = new EditText(this);

edit.setHorizontallyScrolling(true);
edit.setInputType(EditorInfo.TYPE_NUMBER_FLAG_SIGNED|EditorInfo.TYPE_CLASS_NUMBER);

Ответ 8

Чтобы задать тип ввода EditText как десятичный, используйте этот код:

EditText edit = new EditText(this);
edit.SetRawInputType(Android.Text.InputTypes.NumberFlagDecimal | Android.Text.InputTypes.ClassNumber);

Ответ 9

мое решение:

   public void onTextChanged(CharSequence s, int start, int before, int count) {
   char ch=s.charAt(start + count - 1);
   if (Character.isLetter(ch)) {
       s=s.subSequence(start, count-1);
       edittext.setText(s);
    }

Ответ 10

используйте setRawInputType и setKeyListener

editTextNumberPicker.setRawInputType(InputType.TYPE_CLASS_NUMBER | 
                   InputType.TYPE_NUMBER_FLAG_DECIMAL|InputType.TYPE_NUMBER_FLAG_SIGNED );
editTextNumberPicker.setKeyListener(DigitsKeyListener.getInstance(false,true));//set decimals and positive numbers.