Установить цифры 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.