簡體   English   中英

Android EditText-不允許單獨使用小數點分隔符

[英]Android edittext - do not allow decimal separator alone

我有一個Edittext,我只允許數字和十進制數字(分隔符后最多2個小數,例如125.50)。

我為此實現了一個過濾器:

 final EditText  field1 = (EditText)findViewById(R.id.field1);
 field1.setFilters(new InputFilter[] { filter });

    InputFilter filter = new InputFilter() {
        final int maxDigitsBeforeDecimalPoint=5;
        final int maxDigitsAfterDecimalPoint=2;

        @Override
        public CharSequence filter(CharSequence source, int start, int end,
                                   Spanned dest, int dstart, int dend) {
            StringBuilder builder = new StringBuilder(dest);
            builder.replace(dstart, dend, source
                    .subSequence(start, end).toString());
            if (!builder.toString().matches(
                    "(([0-9]{1})([0-9]{0,"+(maxDigitsBeforeDecimalPoint-1)+"})?)?(\\.[0-9]{0,"+maxDigitsAfterDecimalPoint+"})?"

            )) {
                if(source.length()==0)
                    return dest.subSequence(dstart, dend);
                return "";
            }

            return null;

        }
    };

這工作正常 ,但是問題是,如果用戶插入小數點分隔符ALONE,則將出現java.lang.NumberFormatException:對於輸入字符串:“。”

在我的ontextChanged中,我嘗試了以下操作:

 if(field1.getText().toString().equals("[.]")){field1.setText(0);}

還有這個

if(field1.getText().toString().equals(".")){field1.setText(0);}

但沒有用。

如何僅限制小數點分隔符,但允許帶數字呢?

如果這:

if(field1.getText().toString().equals(".")){field1.setText(0);}

是您的確切代碼,然后確定它失敗了,因為0不是字符串,它是一個整數,被視為資源ID。
因此,首先嘗試:

if(field1.getText().toString().equals(".")){field1.setText("0");}

如果再次失敗,則考慮可以通過try/catch來解決NumberFormatException ,如下所示:

double value = 0.0;
try {
    value = Double.parseDouble(field1.getText().toString());
} catch (NumberFormatException e) {
    field1.setText("0");
    e.printStackTrace();
}

對於參考,如果要使用InputFilter,可以使用此鏈接: https ://stackoverflow.com/a/5368816/10396176

對於其他參考,如果您想使用,請嘗試使用textWatcher: https ://stackoverflow.com/a/16684661/10396176

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM