Search code examples
androidandroid-edittextandroid-input-filter

How do I format a string into EditText in Android with "AAA-AAA-AAA" format


I need to get an input of 9 uppercase letters separated by dash like AAA-AAA-AAA and this input has to be formatted while is entered.

Thanks in advance.


Solution

  • I have found the solution using a TextWatcher. I'm using

    android:inputType="textCapCharacters|textNoSuggestions"

    for the EditText input type in order to receive only uppercase letters.

            txtCode = (EditText) findViewById(R.id.txtCode);
    
            txtCode.addTextChangedListener( new TextWatcher() {
                boolean isEdiging;
                @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) {
                    if(isEdiging) return;
                    isEdiging = true;
                    // removing old dashes
                    StringBuilder sb = new StringBuilder();
                    sb.append(s.toString().replace("-", ""));
    
                    if (sb.length()> 3)
                        sb.insert(3, "-");
                    if (sb.length()> 7)
                        sb.insert(7, "-");
                    if(sb.length()> 11)
                        sb.delete(11, sb.length());
    
                    s.replace(0, s.length(), sb.toString());
                    isEdiging = false;
                }
            });