Android:使用小数点EditTexts强制使用点而不是逗号

时间:2019-05-14 14:23:55

标签: android android-edittext keyboard locale

如何强制使用点代替十进制EditText的逗号?

String.replace(“,”,“。”)对我来说不是有效的解决方案。

我虽然通过编程方式设置了美国区域设置,但是它也改变了语言。

是否可以在不更改语言的情况下更改语言环境?

1 个答案:

答案 0 :(得分:1)

您可以将以下内容用于不同的语言环境

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 EditTextandroid: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
}