How do you set EditText to only accept numeric values in Android?

AndroidAndroid Edittext

Android Problem Overview


I have an EditText in which I want only integer values to be inserted. Can somebody tell me which property I have to use?

Android Solutions


Solution 1 - Android

Add android:inputType="number" as an XML attribute.

Solution 2 - Android

For example:

<EditText
android:id="@+id/myNumber"
android:digits="0123456789."
android:inputType="numberDecimal"
/>

Solution 3 - Android

In code, you could do

ed_ins.setInputType(InputType.TYPE_CLASS_NUMBER);

Solution 4 - Android

For only digits input use android:inputType="numberPassword" along with editText.setTransformationMethod(null); to remove auto-hiding of the number.

OR

android:inputType="phone"

For only digits input, I feel these couple ways are better than android:inputType="number". The limitation of mentioning "number" as inputType is that the keyboard allows to switch over to characters and also lets other special characters be entered. "numberPassword" inputType doesn't have those issues as the keyboard only shows digits. Even "phone" inputType works as the keyboard doesnt allow you to switch over to characters. But you can still enter couple special characters like +, /, N, etc.

android:inputType="numberPassword" with editText.setTransformationMethod(null);

inputType=

inputType="phone"

inputType=

inputType="number"

inputType=

Solution 5 - Android

android:inputType="numberDecimal"

Solution 6 - Android

<EditText
android:id="@+id/age"
android:numeric="integer" 
/>





Solution 7 - Android

Try the following code:

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

It will allow you to enter just numbers. You cannot enter chars. if you want to enter chars, not numbers, you can edit the values between the quotes inside getInstance.

Solution 8 - Android

using the below can solve your problem better;

in xml:

<EditText
      android:id="@+id/age"
      android:inputType="numberDecimal|numberSigned"        />

or //in activity inside etfield.addtextchangelistener

     private String blockCharacterSet="+(/)N,*;#";//declare globally
               try {
                for (int i = 0; i < s.length(); i++) {


                    if (blockCharacterSet.contains(s.charAt(i) + "")) {

                        String corrected_settempvalue = arrivalsettemp.substring(0, arrivalsettemp.length() - 1);
                        et_ArrivalSetTemp.setText(corrected_settempvalue);
                        if (corrected_settempvalue.length() != 0)
                            et_ArrivalSetTemp.setSelection(corrected_settempvalue.length());

                    }
                }
            } catch (Exception d) {
                d.printStackTrace();
            }

Solution 9 - Android

If anyone want to use only number from 0 to 9 with imeOptions enable then use below line in your EditText

> android:inputType="number|none"

This will only allow number and if you click on done/next button of keyboard your focus will move to next field.

Solution 10 - Android

You can use it in XML

<EditText
 android:id="@+id/myNumber"
 android:digits="123"
 android:inputType="number"
/>

or,

android:inputType="numberPassword" along with editText.setTransformationMethod(null); to remove auto-hiding of the number.

or,

android:inputType="phone"

Programmatically you can use
editText.setInputType(InputType.TYPE_CLASS_NUMBER);

Solution 11 - Android

I need to catch pressing Enter on a keyboard with TextWatcher. But I found out that all numeric keyboards android:inputType="number" or "numberDecimal" or "numberPassword" e.t.c. don't allow me to catch Enter when user press it.

I tried android:digits="0123456789\n" and all numeric keyboards started to work with Enter and TextWatcher.

So my way is:

android:digits="0123456789\n"
android:inputType="numberPassword"

plus editText.setTransformationMethod(null)

Thanks to barmaley and abhiank.

Solution 12 - Android

I don't know what the correct answer was in '13, but today it is:

myEditText.setKeyListener(DigitsKeyListener.getInstance(null, false, true)); // positive decimal numbers

You get everything, including the onscreen keyboard is a numeric keypad.

ALMOST everything. Espresso, in its infinite wisdom, lets typeText("...") inexplicably bypass the filter and enter garbage...

Solution 13 - Android

the simplest for me

android:numeric="integer" 

although this also more customize

android:digits="0123456789"

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
QuestionSourabhView Question on Stackoverflow
Solution 1 - AndroidUtyiView Answer on Stackoverflow
Solution 2 - AndroidBarmaleyView Answer on Stackoverflow
Solution 3 - AndroidSourabhView Answer on Stackoverflow
Solution 4 - AndroidvepzfeView Answer on Stackoverflow
Solution 5 - AndroidNafizView Answer on Stackoverflow
Solution 6 - AndroidSandeep VView Answer on Stackoverflow
Solution 7 - AndroidRuba EgbariaView Answer on Stackoverflow
Solution 8 - AndroidRushi AyyappaView Answer on Stackoverflow
Solution 9 - AndroidSandeepView Answer on Stackoverflow
Solution 10 - AndroidRubela ShomeView Answer on Stackoverflow
Solution 11 - AndroidAlexander KeyView Answer on Stackoverflow
Solution 12 - AndroidPhlipView Answer on Stackoverflow
Solution 13 - AndroidHenry SimonView Answer on Stackoverflow