Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Format credit card in edit text in android

How to make EditText accept input in format:

4digit 4digit 4digit 4digit  

I tried Custom format edit text input android to accept credit card number, but unfortunately I was unable to delete the spaces. Whenever there is a space, I could not to delete it. Please help me in finding out the issue.

like image 394
Preethi Avatar asked Aug 03 '12 05:08

Preethi


People also ask

How do I change the style of edit text in Android Studio?

You can use the attribute style="@style/your_style" that is defined for any widget. The attribute parent="@android:style/Widget. EditText" is important because it will ensure that the style being defined extends the basic Android EditText style, thus only properties different from the default style need to be defined.


1 Answers

After finding multiple answers that are 'OK'. I moved towards a better TextWatcher which is designed to work correctly and independently from the TextView.

TextWatcher class is as follows:

/**  * Formats the watched EditText to a credit card number  */ public static class FourDigitCardFormatWatcher implements TextWatcher {      // Change this to what you want... ' ', '-' etc..     private static final char space = ' ';      @Override     public void onTextChanged(CharSequence s, int start, int before, int count) {     }      @Override     public void beforeTextChanged(CharSequence s, int start, int count, int after) {     }      @Override     public void afterTextChanged(Editable s) {         // Remove spacing char         if (s.length() > 0 && (s.length() % 5) == 0) {             final char c = s.charAt(s.length() - 1);             if (space == c) {                 s.delete(s.length() - 1, s.length());             }         }         // Insert char where needed.         if (s.length() > 0 && (s.length() % 5) == 0) {             char c = s.charAt(s.length() - 1);             // Only if its a digit where there should be a space we insert a space             if (Character.isDigit(c) && TextUtils.split(s.toString(), String.valueOf(space)).length <= 3) {                 s.insert(s.length() - 1, String.valueOf(space));             }         }     } } 

Then add it to your TextView as you would any other TextWatcher.

{   //...   mEditTextCreditCard.addTextChangedListener(new FourDigitCardFormatWatcher());  } 

This will auto delete the space sensibly going back so the user can actually do less keystrokes when editing.

Caveat

If you are using inputType="numberDigit" this will disable the '-' and ' ' chars, so I recommend using, inputType="phone". This enables other chars, but just use a custom inputfilter and problem solved.

like image 50
Chris.Jenkins Avatar answered Oct 25 '22 14:10

Chris.Jenkins