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

2
Дякую. Я насправді вважаю, що ця відповідь заслуговує галочки, оскільки вона специфічна для того, про що я просив, але обидва рішення працюють.
— ryandlf

@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?
— Мітеш-шах

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

Здається, це було скасовано. Радий допомогти.
— Рікі

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.