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

JoeyRA
источник
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" />
НАГЕШ MH
источник
1
Обратите внимание, что шестнадцатеричные IP-адреса (части, начинающиеся с 0x) также допустимы, и вместо IP-адреса можно использовать доменное имя.
Triang3l