77

how to force the EditText to accept only numbers.?

6 Answers6

123

Use android:inputType="number" in your layout XML

Denis Babak
  • 1,874
  • 2
  • 16
  • 13
63

This also works fine:

android:digits="0123456789"
Alysson Myller
  • 1,203
  • 11
  • 13
35

Or you can add the following:

yourEditText.setInputType(InputType.TYPE_CLASS_NUMBER | 
                          InputType.TYPE_NUMBER_FLAG_DECIMAL |
                          InputType.TYPE_NUMBER_FLAG_SIGNED);

this will accept numbers, float point numbers and negative numbers you can remove any of these as needed

Jason Hartley
  • 2,459
  • 1
  • 31
  • 40
Sergey Benner
  • 4,421
  • 2
  • 22
  • 29
14

You can use android:inputType="number" in the XML file. You can specify other values such as numberDecimal as well.

Also, you might additionally want to use android:singleLine="true" for a single line Edittext.

Also, look into android:numeric and android:maxLength. maxLength in particular can be useful for setting length limitations.

ketan
  • 19,129
  • 42
  • 60
  • 98
Samar
  • 1,865
  • 12
  • 13
  • What if my editText appears in the dialog, and thus, I only declare it in .java code? i.e. the dialog editText does not appear in XML file. How can I still achieve this? – Sibbs Gambling Jun 20 '13 at 07:41
2

If you need support for decimal numbers use this:

  android:inputType="numberDecimal"
Giedrius Šlikas
  • 1,073
  • 12
  • 12
0

This is the final solution:

 public static void enforceEditTextUseNumberOnly(EditText field) {
        Typeface existingTypeface = field.getTypeface();
        field.setInputType((InputType.TYPE_CLASS_NUMBER | InputType.TYPE_NUMBER_VARIATION_PASSWORD));
        field.setTransformationMethod(new NumericKeyBoardTransformationMethod());
        field.setTypeface(existingTypeface);
        if (field.getParent().getParent() instanceof TextInputLayout) {
            ((TextInputLayout) field.getParent().getParent()).setPasswordVisibilityToggleEnabled(false);
        }
    }

  private static class NumericKeyBoardTransformationMethod extends PasswordTransformationMethod {
        @Override
        public CharSequence getTransformation(CharSequence source, View view) {
            return source;
        }
    }
Pier Betos
  • 1,038
  • 9
  • 17