如何强制 EditText 只接受数字?

如何强制 EditText 仅接受数字?

63816 次浏览

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

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

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.

This also works fine:

android:digits="0123456789"

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;
}
}

If you need support for decimal numbers use this:

  android:inputType="numberDecimal"