Установить цифры EditText программно


86

По сути, я пытаюсь программно установить значение цифр EditText. Пока у меня есть:

weightInput.setInputType(InputType.TYPE_CLASS_PHONE);
weightInput.setKeyListener(DigitsKeyListener.getInstance());

Это нормально, но я также хочу иметь возможность включать десятичный знак (.). Любые идеи?


1
Вы, наверное, предпочли бы использовать DialerKeyListenerвместоDigitsKeyListener
Дмитрий Грязин

Ответы:


206

Попробуй это:

<EditText
    android:inputType="number"
    android:digits="0123456789."
/>

Из кода:

weightInput.setKeyListener(DigitsKeyListener.getInstance("0123456789."));

Но он позволяет пользователю включать несколько "." Реальные числа см. В ответе JoeyRA .


Это нормально, но я хочу сделать это программно. Причина в том, что я хочу повторно использовать один макет в нескольких ситуациях, поскольку эти цифры - единственная переменная, которая постоянно изменяется. В моей ситуации выполнение этого кода намного эффективнее.
ryandlf 04

2
Спасибо. Я действительно считаю, что этот ответ заслуживает галочки, потому что он относится к тому, что я просил, но оба решения работают.
ryandlf 05

@feresr, это странно, потому что смотрим на TextViewисточники: // If no input type was specified, we will default to generic text, since we can't tell the IME about the set of digits that was selected.
Дмитрий Грязин

Что толку .после 9?
Mitesh Shah

1
@MiteshShah позволяет использовать десятичный разряд.
masterwok

30

Попробуй это:

weightInput.setInputType(InputType.TYPE_CLASS_NUMBER);          
weightInput.setInputType(InputType.TYPE_NUMBER_FLAG_DECIMAL);           
weightInput.setKeyListener(DigitsKeyListener.getInstance(false,true));

public static DigitsKeyListener getInstance (boolean sign, boolean decimal) 

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

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


1
Просто добавьте пояснение: editText.setKeyListener (DigitsKeyListener.getInstance (true, true)); для включения десятичных и отрицательных чисел. editText.setKeyListener (DigitsKeyListener.getInstance (false, true)); для включения только положительных десятичных чисел. editText.setKeyListener (DigitsKeyListener.getInstance (false, false)); чтобы включить только положительные целые числа.
SerSánGal

8
Вопрос: если вы setInputTypeснова и снова, не заменит ли второй на первый? Я думаю, вам стоит использовать, weightInput.setInputType(InputType.TYPE_CLASS_NUMBER | InputType.TYPE_NUMBER_FLAG_DECIMAL);но я не уверен на 100%
Рафаэль Руис Муньос

20

Используйте InputType.TYPE_NUMBER_FLAG_DECIMAL.

См. Также: Типы ввода .


-1? Я точно этого не делал. Ваше решение сработало, спасибо.
ryandlf 05

Кажется, это было отменено. Рад помочь.
Ricky

4

Для ввода IP-адреса (несколько точек и чисел)

пытаться

<EditText
    android:id="@+id/ipBox"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:hint="@string/ipAddrHint"
    android:inputType="numberDecimal|number"
    android:digits="0123456789."
    android:textSize="30sp" />

1
Обратите внимание, что шестнадцатеричные IP-адреса (части, начинающиеся с 0x) также допустимы, и вместо IP-адреса можно использовать доменное имя.
Triang3l
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.