Search code examples
androidandroid-edittextdecimal-point

Automatically set decimal point (.) once user enters 2 digits from number decimal keyboard android Edittext


Automatically set decimal point (.) once user enters 2 digits from number decimal keyboard in android Edit-text


Solution

  • Create a class:-

    public class DecimalDigitsInputFilter implements InputFilter
    {
        Pattern pattern;
    
        public DecimalDigitsInputFilter(int digitsBeforeDecimal, int digitsAfterDecimal)
        {
            pattern = Pattern.compile("(([1-9]{1}[0-9]{0," + (digitsBeforeDecimal - 1) + "})?||[0]{1})((\\.[0-9]{0," + digitsAfterDecimal + "})?)||(\\.)?");
        }
    
        @Override public CharSequence filter(CharSequence source, int sourceStart, int sourceEnd, Spanned destination, int destinationStart, int destinationEnd)
        {
            // Remove the string out of a destination that is to be replaced.
            String newString = destination.toString().substring(0, destinationStart) + destination.toString().substring(destinationEnd, destination.toString().length());
    
            // Add the new string in.
            newString = newString.substring(0, destinationStart) + source.toString() + newString.substring(destinationStart, newString.length());
    
            // Now check if the new string is valid.
            Matcher matcher = pattern.matcher(newString);
    
            if(matcher.matches())
            {
                // Returning null indicates that the input is valid.
                return null;
            }
    
            // Returning the empty string indicates the input is invalid.
            return "";
        }
    }
    

    Now set your edittext like this:

    edittext.setFilters(new InputFilter[]{new DecimalDigitsInputFilter(2, 2)});