Android: принудительное использование точки вместо запятой с десятичной дробью EditTexts - PullRequest
0 голосов
/ 14 мая 2019

Как я могу принудительно использовать точку вместо запятой с десятичными значениями EditTexts?

String.replace (",", ".") Не является для меня правильным решением.

Хотелось установить языковой стандарт США программным способом, но он также изменил язык.

Есть ли способ изменить языковой стандарт без изменения языка?

1 Ответ

1 голос
/ 14 мая 2019

Вы можете использовать следующее для разных локалей

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));
        }


});
}

или раствор 2 используйте EditText с android:inputType="numberDecimal" и android:digits="0123456789.,".

Затем добавьте TextChangedListener к EditText со следующим 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
}
...