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