我正在嘗試向我的 EditText 添加一個 InputFilter,它必須只允許只有一個小數點的整數或十進制數。
接受的輸入必須是:
1 - 12 - 3.33 - 4.20 etc.
拒絕:
.0 - 5. - 5.5.5 - 40.21.1 etc.
我創建了一個自定義 InputFilter 來檢查輸入是否與 RegExp 匹配 ^\d (\.\d )?$
但是 EditText 總是顯示一個空字串,在除錯中“spanned”總是空的,而默認情況下 EditText 有一個起始值。
篩選:
public class DecimalDigitsFilter implements InputFilter {
@Override
public CharSequence filter(CharSequence charSequence, int i, int i1, Spanned spanned, int i2, int i3) {
Pattern pattern = Pattern.compile("^\\d (\\.\\d )?$");
Matcher matcher = pattern.matcher(spanned);
if (!matcher.matches()){
return "";
}
return null;
}
}
活動:
quantita.setFilters(new InputFilter[] {new DecimalDigitsFilter()});
uj5u.com熱心網友回復:
您需要針對以下檔案中的實際文本運行匹配器EditText:
public class DecimalDigitsFilter implements InputFilter {
@Override
public CharSequence filter(CharSequence charSequence, int i, int i1, Spanned spanned, int i2, int i3) {
Pattern pattern = Pattern.compile("^\\d (\\.\\d )?$");
Matcher matcher = pattern.matcher(spanned.getText());
if (!matcher.matches()){
return "";
}
return null;
}
}
uj5u.com熱心網友回復:
我不得不移動 mo 邏輯,TextChangedListener因為InputFilter我無法獲得整個字串來檢查我的 RegExp。
此外,我什至不得不像這樣更改我的 RegExp,^\d (\.([\d ] )?)?$我必須將小數點后的值設定為可選,否則.matches()每次我寫小數點時都會失敗。
所以最終的代碼是這樣的:
quantita.addTextChangedListener(new TextWatcher() {
@Override
public void beforeTextChanged(CharSequence charSequence, int i, int i1, int i2) {
}
@Override
public void onTextChanged(CharSequence charSequence, int i, int i1, int i2) {
}
@Override
public void afterTextChanged(Editable editable) {
Pattern pattern = Pattern.compile("^\\d (\\.([\\d ] )?)?$");
Matcher matcher = pattern.matcher(quantita.getText().toString());
if (!matcher.matches()){
quantita.setText("");
}
}
});
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/388656.html
