EditText限制輸入內容為1-100範圍內的數字
阿新 • • 發佈:2019-01-28
首先在佈局檔案中,設定inputType為number,且maxLength=3;然後設定監聽輸入,程式碼如下
public TextWatcher inputWatch(final EditText input) {
return new TextWatcher() {
private String outStr = ""; //這個值儲存輸入超過兩位數時候顯示的內容
@Override
public void beforeTextChanged(CharSequence s, int start, int count, int after) {
String edit=s.toString();
if (edit.length()==2&&Integer.parseInt(edit)>=10){
outStr=edit;
}
}
@Override
public void onTextChanged(CharSequence s, int start, int before, int count) {
String words = s.toString();
//首先內容進行非空判斷,空內容(""和null)不處理
if (!TextUtils.isEmpty(words)) {
//1-100的正則驗證
Pattern p = Pattern.compile("^(100|[1-9]\\d|\\d)$");
Matcher m = p.matcher(words);
if (m.find() || ("").equals(words)) {
//這個時候輸入的是合法範圍內的值
} else {
if (words.length() > 2) {
//若輸入不合規,且長度超過2位,繼續輸入只顯示之前儲存的outStr
input.setText(outStr);
//重置輸入框內容後預設游標位置會回到索引0的地方,要改變游標位置
input.setSelection(2);
}
ToastUtil.showToast("請輸入範圍在1-100之間的整數");
}
}
}
@Override
public void afterTextChanged(Editable s) {
//這裡的處理是不讓輸入0開頭的值
String words = s.toString();
//首先內容進行非空判斷,空內容(""和null)不處理
if (!TextUtils.isEmpty(words)) {
if (Integer.parseInt(s.toString()) <= 0) {
input.setText("");
ToastUtil.showToast("請輸入範圍在1-100之間的整數");
}
}
}
};
}