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

209

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

Sourabh
источник

Ответы:

403

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

Utyi
источник
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);
Sourabh
источник
@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 = "число"

abhiank
источник
1
Это потрясающе! android:inputType="numberPassword"вместе сeditText.setTransformationMethod(null);
coderpc
этот совет делает мое приложение совершенным.
Kernelzero
6
android:inputType="numberDecimal"
Nafiz
источник
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 = "номер | ни"

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

Sandeep
источник
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("...")необъяснимым образом обойти фильтр и попасть в мусор ...

Phlip
источник
-4

самый простой для меня

android:numeric="integer" 

хотя это тоже больше подгоняет

android:digits="0123456789"
Генри Саймон
источник
Android: числовое значение устарело начиная с API 3, см. ответ на stackoverflow.com/questions/12625380/…
winne2