1. 特殊字符限制
情景:密碼輸入框不允許輸入特殊字符,如果輸入給相關的提示,並且輸入不成功
方法:根據EditText 的setFilters
方法去做限制
InputFilter filter_speChat = new InputFilter() {
@Override
public CharSequence filter(CharSequence charSequence, int i, int i1, Spanned spanned, int i2, int i3) {
String speChat = "[`~!@#_$%^&*()+=|{}'.:;',\\[\\]<>/?~!@#¥%……&*()— +\\-|{}【】‘;:”“’。,、?]";
Pattern pattern = Pattern.compile(speChat);
Matcher matcher = pattern.matcher(charSequence.toString());
if (matcher.find()) {
ToastUtils.showToast(context, Utils.getStringByValues(R.string.threshold_area),ToastUtils.ERROR_LEVEL);
return "";
} else {
return null;
}
}
};
editText.setFilters(new InputFilter[]{filter_speChat});
2. 限制輸入整數數大小
情景:成績輸入框限制只能輸入 0-100大小的整數
方法: 使用EditText addTextChangedListener
監聽方法 和配合限制輸入特殊字符的限制條件
etSetting.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 s) {
if (s != null && s.toString().equals(".")) {
etSetting.setText("");
} else if (s != null && !"".equals(s.toString()) && Integer.parseInt(s.toString()) > 100) {
etSetting.setText(s.toString().substring(0, s.toString().length() - 1));
etSetting.setSelection(etSetting.getText().toString().length());
ToastUtils.showToast(mContext, Utils.getStringByValues(R.string.threshold_area), ToastUtils.ERROR_LEVEL);
}else if (s != null && !"".equals(s.toString())){
if (s.toString().length()>=2&&s.toString().startsWith("0")){
etSetting.setText(s.toString().substring(0, s.toString().length() - 1));
etSetting.setSelection(etSetting.getText().toString().length());
ToastUtils.showToast(mContext, Utils.getStringByValues(R.string.threshold_area), ToastUtils.ERROR_LEVEL);
}
}
}
});
3. 限制輸入小數數大小
情景:溫度輸入框限制只能輸入 35-40大小的整數,精確到小數點後一位
方法: 使用EditText addTextChangedListener
監聽方法 和配合限制輸入特殊字符的限制條件(特殊字符要除去 小數點 (.))
etSetting.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 s) {
if (s != null && !"".equals(s.toString())){
if (s.toString().length()==1){
String regex = "^[0-25-9]";
Pattern pattern = Pattern.compile(regex);
Matcher match = pattern.matcher(s.toString());
if (match.matches()){
etSetting.setText("");
ToastUtils.showToast(mContext, Utils.getStringByValues(R.string.threshold_area_1), ToastUtils.ERROR_LEVEL);
}
}else if (s.toString().length()==2){
String regex = "^[1-4]";
Pattern pattern = Pattern.compile(regex);
Matcher match = pattern.matcher(s.toString().substring(1));
if (match.matches()){
etSetting.setText(s.toString().substring(0, s.toString().length() - 1));
etSetting.setSelection(etSetting.getText().toString().length());
ToastUtils.showToast(mContext, Utils.getStringByValues(R.string.threshold_area_1), ToastUtils.ERROR_LEVEL);
}
}else if (s.toString().indexOf(".")==-1&&s.toString().length()>2){
etSetting.setText(s.toString().substring(0, s.toString().length() - 1));
etSetting.setSelection(etSetting.getText().toString().length());
ToastUtils.showToast(mContext, Utils.getStringByValues(R.string.threshold_area_1), ToastUtils.ERROR_LEVEL);
}else {
if (checkFloatLength(s.toString())>1){
etSetting.setText(s.toString().substring(0, s.toString().length() - 1));
etSetting.setSelection(etSetting.getText().toString().length());
ToastUtils.showToast(mContext, Utils.getStringByValues(R.string.threshold_area_2), ToastUtils.ERROR_LEVEL);
}else if (s.toString().length()==4&&Float.parseFloat(s.toString())>40){
etSetting.setText(s.toString().substring(0, s.toString().length() - 1));
etSetting.setSelection(etSetting.getText().toString().length());
ToastUtils.showToast(mContext, Utils.getStringByValues(R.string.threshold_area_1), ToastUtils.ERROR_LEVEL);
}
}
}
}
});
private int checkFloatLength(String toString) {
// Log.e("zyb", "checkFloatLength: "+toString.split("\\.")[1].length());
if (toString.indexOf(".")>-1&&toString.split("\\.").length>1){
return toString.split("\\.")[1].length();
}else {
return 0;
}
}
4.限制輸入框制定長度的字符
情景:名稱輸入框制定輸入16個字符(中文8個文字,英文16個字母)
方法: 使用EditText addTextChangedListener
監聽方法
device_name.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 s) {
try {
if (s.toString().getBytes("GBK").length>16){
device_name.setText(s.toString().substring(0, s.toString().length() - 1));
device_name.setSelection(device_name.getText().toString().length());
ToastUtils.showToast(DevicesSettingActivity.this, Utils.getStringByValues(R.string.device_area), ToastUtils.ERROR_LEVEL);
}
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
}
}
});