How To Validate an EditText to handle numbers only in Android? - android

How can I validate a text view in android to handle positive integer numbers?
I don't want it to accept any character or signs etc...

Have you taken a look at the EditText's inputType attribute? You can set a whole bunch of different input types that the EditText should limit the user input to.
From the sounds of it, you're probably looking for something like:
<EditText
....
android:inputType="number"
... />

You can use regular expressions. See:
http://developer.android.com/reference/java/util/regex/Pattern.html
Your pattern could look like ^[0-9]{1,10}$
which means that the entered value can only consist of digits (minimum 1, maximum 10)

IMO best way is use inputType in xml
<EditText
...
android:inputType="phone" />
You have to remember that "+" is also part of the phone number.

Use the code in your Edittext XML to restrict any range of values
android:digits="0123456789"

You can use from XML
<EditText
...
android:inputType="phone" />
or programmatically
EditText editText = (EditText) findViewById(R.id.yourId);
editText.setInputType(InputType.TYPE_CLASS_NUMBER);

Related

Don't allow linebreaks in EditTexts

I would like to limit the maximum amount of letters and disallow linebreaks in my EditText on Android.
I know that I can limit the characters by using
android:maxLength="..."
But is there a way to disallow linebreaks? If I use
singleLine="true"
is there still a linebreak character in my
editText.getText().toString()
?
NO there will be no line break if you use
singleLine="true"
So using this option is suitable if one wants no line break
Add android:maxLines="1" in your edittext tag as
<EditText
.....
android:maxLines="1" // add here
</EditText>
And also android:singleLine="true" should work.

How to disable letters in keyboard (leave only digits)?

I'm developing Android application, and I need to disable letters for user's keyboard in order to allow user to input only digits in EditText. Please, tell me, is it possible?
add android:inputType="number" to the EditText in the layout xml.
More information on inputType's can be found at http://developer.android.com/reference/android/widget/TextView.html#attr_android:inputType
You can also go further and do something like:
<EditText
android:inputType="number"
android:digits="0123456789"
/>
EditText input = new EditText(this);
input.setInputType(InputType.TYPE_CLASS_NUMBER);
OR
Using XML
android:inputType="number"

How can I define my own InputFilter and allow for only certain types (see post) of input?

Let's say I have an EditText and I want to restrict it to 0-9 and A-F (inclusive), for hex input. Is there a way I can do that? I tried looking at InputFilters and I'm not sure that's the right way. Has anyone achieved this?
Set the input type to number and digits to "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ"
In an xml file it would look like this:
<EditText
android:id="#+id/hexedit"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:digits="0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ"
android:inputType="number"
/>
You can experiment with different inputTypes to see which soft keyboard layout they bring up.

How open specific page of keyboard?

In one of my edittext fields users can enter numeric values and colons. These keys are part of one specific page of the keyboard. I would like to open that specific page if the users enters the corresponding edittext field. If there's a XML attribute for the layout it would be even better.
Many thanks in advance.
To display pure numeric keyboard use android:inputType="phone"
The android:inputType="time" is the best options for time input. It
will let you input numbers and colon ':'.
For 'Known Distance' and 'Distance to estimate' you can use
android:inputType="number|numberDecimal". It will let you input
numbers with dots i.e double or floats.
You can use android:inputType="number" for Numbers. Here is an example of EditText which opens phone with digits-numbers Keyboard.
<EditText
android:id="#+id/test"
android:inputType="phone"
android:layout_height="wrap_content"
android:layout_width="wrap_content" />
Here is a small example of using inputType in layout.
You can use following values in inputType field.
none
text
textCapCharacters
textCapWords
textCapSentences
textAutoCorrect
textAutoComplete
textMultiLine
textImeMultiLine
textNoSuggestions
textUri
textEmailAddress
textEmailSubject
textShortMessage
textLongMessage
textPersonName
textPostalAddress
textPassword
textVisiblePassword
textWebEditText
textFilter
textPhonetic
textWebEmailAddress
textWebPassword
number
numberSigned
numberDecimal
numberPassword
phone
datetime
date
time
Here is detailed explanation about it.
According to InputType of EditText in Android and other answers here, the only way is to make your own class of keyboard. Or find some ready on the net.

Does android have a numeric keypad?

Is there a way in android to invoke a numeric only keypad, i.e. a virtual keypad that contains only the numbers 0 to 9 and a "." sign?
Try doing android:inputType="phone" ?
Basically, you need what Peter Boughton said.
More generally, if you need to invoke different type of keyboard, depending on the input you expect on your EditText component, you should use the IMF (Input Media Framework) and different IMEs (Input Media Editors).
You can customize not only the input symbols, but also the layout of the keyboard in your application, auto-completion and other options.
You may want to read this post in the Android Developers Blog:
Updating Applications for On-screen Input Methods
If you're talking about restricting input to 0-9 + "." for an EditText box, I use the android:numeric="decimal" attribute in the layout XML.
<EditText android:numeric="decimal" />
If you're working with dynamically generated EditText views, the relevant method to call on it is
setKeyListener()
Make sure you only have:
<EditText android:numeric="decimal" />
and not both:
<EditText android:numeric="decimal"
android:digits="0123456789." />
The latter, ie using both numeric and digits was not working for me. However, using only numeric works.
<EditText android:numeric="decimal" />
only does not affect keypad to convert into decimal.
Instead, use:
<EditText android:inputType="phone" android:numeric="decimal"></EditText>
This will show the numeric keypad only.

Categories

Resources