Java 如何使逗号只能在EditText中输入一次?

Java 如何使逗号只能在EditText中输入一次?,java,android,Java,Android,我做某事已经有一段时间了,但就是做不成。我的问题是我有一个EditText,我希望用户能够输入一个十进制数(例如3,95或3.95)。我将inputType设置为numberDecimal,并尝试将数字限制为“0123456789”,但它要么不允许用户输入逗号,要么允许用户输入一个逗号。我希望用户只能输入一个分隔符(无论是“.”还是“,”)。有人能帮我吗?首先根据区域设置获取分隔符 DecimalFormat format = (DecimalFormat) DecimalFormat.get

我做某事已经有一段时间了,但就是做不成。我的问题是我有一个EditText,我希望用户能够输入一个十进制数(例如3,95或3.95)。我将inputType设置为numberDecimal,并尝试将数字限制为“0123456789”,但它要么不允许用户输入逗号,要么允许用户输入一个逗号。我希望用户只能输入一个分隔符(无论是“.”还是“,”)。有人能帮我吗?

首先根据区域设置获取分隔符

DecimalFormat format = (DecimalFormat) 
DecimalFormat.getInstance(Locale.getDefault());
DecimalFormatSymbols symbols=format.getDecimalFormatSymbols();
defaultSeperator=Character.toString(symbols.getDecimalSeparator());
然后,将textwatcher设置为限制

editText.addTextChangedListener(new TextWatcher() {
        public void afterTextChanged(Editable editable) {
if(editable.toString().contains(defaultSeperator))
    editText.setKeyListener(DigitsKeyListener.getInstance("0123456789"));
else
    editText.setKeyListener(DigitsKeyListener.getInstance("0123456789" + defaultSeperator));
    }
}

您需要在编辑文本时设置输入过滤器

 public static InputFilter getFilter() {
    return new InputFilter() {
        @Override
        public CharSequence filter(CharSequence source, int start, int end, Spanned dest, int dstart, int dend) {
            for (int index = start; index < end; index++) {
               // Filter here
            }
            return null;
        }
    };
}



et_Txt.setFilters(new InputFilter[]{getFilter()});
publicstaticinputfilter getFilter(){
返回新的InputFilter(){
@凌驾
公共CharSequence筛选器(CharSequence源、int开始、int结束、跨区目标、int开始、int结束){
for(int index=start;index

然后根据您的要求验证每个字符输入

实时检查格式

1. replace , => .
2. cast to double
if casting fails, go back to backuped string.
在布局xml中:

<EditText
    android:id="@+id/editText"
    android:layout_height="wrap_content"
    android:layout_width="match_parent"
    android:inputType="numberDecimal"
    android:digits="0123456789.,"/>
我已经做了很长一段时间了,但是我就是做不到[…]没有提供代码。一言以蔽之。
final EditText editText = (EditText) findViewById(R.id.editText);
        editText.addTextChangedListener(new TextWatcher() {
            String sBackup;

            @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) {
                double value;
                try {
                    if (editable.toString().equals("") == false) {
                        value = Double.valueOf(editable.toString().replace(',', '.'));
                        sBackup = editable.toString();
                    }
                } catch (Exception e) {
                    editText.setText(sBackup);
                    editText.setSelection(editText.getText().toString().length());
                }
            }
        });