Как установить только числовое значение для редактирования текста в Android?


209

У меня есть, edittextв котором я хочу, чтобы были вставлены только целочисленные значения. Может кто-нибудь сказать мне, какое свойство я должен использовать?

Ответы:


403

Я думаю, android:inputType="number"в атрибутах XML.


11
Чувак, я люблю разработчика Android ... такой шум, чтобы получить эту опцию на веб-страницах!
Алекс

14
Привет, в Android 2.3.3, это "число подписано". Просто записал это здесь, на случай, если кто-то его ищет :)
Лимонный сок

Что если мой editText появится в диалоговом окне, и поэтому я объявлю его только в коде .java? то есть диалог editText не появляется в файле XML. Как я могу все еще достичь этого?
Sibbs Gambling

1
Кроме того, вы могли бы использовать android:inputType="phone"вместо этого. Но это кажется немного более "занятым".
Чад Бингхэм

126

Например:

<EditText
android:id="@+id/myNumber"
android:digits="0123456789."
android:inputType="numberDecimal"
/>

3
Это лучшее решение!
RRTW

2
Я предполагаю, что строка должна читать, 0123456789.а не0123456780.
audiFanatic

Это работает и с Android: inputType = "number"! Мне это нужно для того, чтобы пользователи не могли вводить операторы, скобки и т. Д. На цифровой клавиатуре. Какой спасатель, чувак! Добро пожаловать в Costco; Я тебя люблю!
gonzobrains

2
Это не позволит вам ставить отрицательные числа и в то же время разрешит дублирование десятичных знаков (например: 1.1.1 .....)
Руши Айяппа

Хорошо, добавление android: цифры также обрабатывают случай копирования и вставки.
StoneLam

107

В коде вы могли бы сделать

ed_ins.setInputType(InputType.TYPE_CLASS_NUMBER);

@MohamedKhamis это название EditText
KERiii

1
Сурабх попросил «вставить только целочисленные значения». Это позволяет вводить намного больше.
Зон

30

Для ввода только цифр используйте android:inputType="numberPassword"вместе с, editText.setTransformationMethod(null);чтобы удалить автоматическое скрытие номера.

ИЛИ

android:inputType="phone"

Я чувствую, что эти два способа лучше, чем ввод только цифр android:inputType="number". Ограничение упоминания «числа» в качестве inputType состоит в том, что клавиатура позволяет переключаться на символы, а также позволяет вводить другие специальные символы. У inputType «numberPassword» таких проблем нет, так как клавиатура показывает только цифры. Даже «телефонный» тип ввода работает, так как клавиатура не позволяет переключаться на символы. Но вы все равно можете ввести пару специальных символов, таких как +, /, N и т. Д.

android: inputType = "numberPassword" с editText.setTransformationMethod (null);

inputType = "numberPassword"

inputType = "телефон"

inputType = "телефон"

inputType = "число"

inputType = "число"


1
Это потрясающе! android:inputType="numberPassword"вместе сeditText.setTransformationMethod(null);
coderpc

этот совет делает мое приложение совершенным.
Kernelzero

6
android:inputType="numberDecimal"

5
Это здорово, но система целых чисел не содержит десятичных чисел.
RileyE

@RileyE Что ты имеешь в виду под этим? Мы только начали использовать это для всех наших числовых входов, и я хочу убедиться, что мы ничего не пропустили. Спасибо!
Джошуа Пинтер


2

Использование ниже может решить вашу проблему лучше;

в XML:

<EditText
      android:id="@+id/age"
      android:inputType="numberDecimal|numberSigned"        />

или // в действии внутри etfield.addtextchangelistener

     private String blockCharacterSet="+(/)N,*;#";//declare globally
               try {
                for (int i = 0; i < s.length(); i++) {


                    if (blockCharacterSet.contains(s.charAt(i) + "")) {

                        String corrected_settempvalue = arrivalsettemp.substring(0, arrivalsettemp.length() - 1);
                        et_ArrivalSetTemp.setText(corrected_settempvalue);
                        if (corrected_settempvalue.length() != 0)
                            et_ArrivalSetTemp.setSelection(corrected_settempvalue.length());

                    }
                }
            } catch (Exception d) {
                d.printStackTrace();
            }

2

Если кто-то хочет использовать только число от 0 до 9 с imeOptionsвключенной функцией, используйте ниже строку в вашемEditText

Android: inputType = "номер | ни"

Это позволит только номер, и если вы нажмете кнопку «Готово / следующее» на клавиатуре, ваш фокус переместится в следующее поле.


0

Вы можете использовать его в XML

<EditText
 android:id="@+id/myNumber"
 android:digits="123"
 android:inputType="number"
/>

или,

android:inputType="numberPassword" along with editText.setTransformationMethod(null); to remove auto-hiding of the number.

или,

android:inputType="phone"

Программно вы можете использовать
editText.setInputType (InputType.TYPE_CLASS_NUMBER);


0

Мне нужно отловить нажатие Enter на клавиатуре с TextWatcher . Но я обнаружил, что все цифровые клавиатуры android: inputType = "number" или "numberDecimal" или "numberPassword" и т. Д. Не позволяют мне перехватывать Enter, когда пользователь нажимает его.

Я попробовал, android:digits="0123456789\n"и все цифровые клавиатуры начали работать с Enter и TextWatcher.

Итак, мой путь:

android:digits="0123456789\n"
android:inputType="numberPassword"

плюс editText.setTransformationMethod(null)

Спасибо бармалей и абхианков.


0

Я не знаю, какой правильный ответ был в 13 году, но сегодня это:

myEditText.setKeyListener(DigitsKeyListener.getInstance(null, false, true)); // positive decimal numbers

Вы получаете все, включая экранную клавиатуру и цифровую клавиатуру.

Почти все. Эспрессо в своей бесконечной мудрости позволяет typeText("...")необъяснимым образом обойти фильтр и попасть в мусор ...


Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.