Search code examples
androidandroid-edittextkeyboardlocale

Android : Force the use of the dot instead of the comma with decimal EditTexts


How can I force the use of the dot instead of the comma with decimal EditTexts?

String.replace(",", ".") is not a valid solution for me.

I though to set the US Locale programmatically, but it changed the language too.

Is there a way to change the Locale without changing the language?


Solution

  • you could use the following for different locales

    private void localeDecimalInput(final EditText editText){
    
        DecimalFormat decFormat = (DecimalFormat) DecimalFormat.getInstance(Locale.getDefault());
        DecimalFormatSymbols symbols=decFormat.getDecimalFormatSymbols();
        final String defaultSeperator=Character.toString(symbols.getDecimalSeparator());
    
        editText.addTextChangedListener(new TextWatcher() {
    
            @Override
            public void beforeTextChanged(CharSequence s, int start, int count, int after) {
    
            }
    
            @Override
            public void onTextChanged(CharSequence s, int start, int before, int count) {
    
            }
    
            @Override
            public void afterTextChanged(Editable editable) {
                if(editable.toString().contains(defaultSeperator))
                    editText.setKeyListener(DigitsKeyListener.getInstance("0123456789"));
                else
                    editText.setKeyListener(DigitsKeyListener.getInstance("0123456789" + defaultSeperator));
            }
    
    
    });
    }
    

    or solution 2 use an EditText with android:inputType="numberDecimal" and android:digits="0123456789.,".

    Then add a TextChangedListener to the EditText with the following afterTextChanged:

    public void afterTextChanged(Editable s) {
        double doubleValue = 0;
        if (s != null) {
            try {
                doubleValue = Double.parseDouble(s.toString().replace(',', '.'));
            } catch (NumberFormatException e) {
                //Error
            }
        }
        //Do something with doubleValue
    }