I have read Android: Limiting EditText to numbers and How do I show the number keyboard on an EditText in android?. Unfortunately, none of them seems to fit my needs.
I want to restrict my EditText input to only numbers. However, I also want to allow signed and/or decimal input.
Here is my current code (I need to do this programmatically):
EditText edit = new EditText(this);
edit.setHorizontallyScrolling(true);
edit.setInputType(InputType.TYPE_CLASS_NUMBER);
With this, my EditText merrily restricts all input to numerical digits. Unfortunately, it doesn't allow anything else, like the decimal point.
If I change that line to edit.setInputType(InputType.TYPE_NUMBER_FLAG_DECIMAL)
, the EditText accepts all input (which isn't what I want...).
I've tried combining flags (in desperation to see if it would work):
edit.setInputType(InputType.TYPE_CLASS_NUMBER);
edit.setInputType(InputType.TYPE_NUMBER_FLAG_DECIMAL)
edit.setInputType(InputType.TYPE_NUMBER_FLAG_SIGNED)
That didn't work either (the EditText accepted all input as usual).
So, how do I do this?
TO set the input type of EditText as decimal use this code:
Try using TextView.setRawInputType() it corresponds to the
android:inputType
attribute.The best way to do that programmatically is using the next method:
Returns a DigitsKeyListener that accepts the digits 0 through 9, plus the minus sign (only at the beginning) and/or decimal point (only one per field) if specified.
This solve the problem about the many '.' in EditText
put this line in
xml
Use this. Works fine
EDIT
kotlin version
There's no reason to use
setRawInputType()
, just usesetInputType()
. However, you have to combine the class and flags with the OR operator: