EditText之筛选和提示

文章要点:如何实现EditText对输入内容的筛选及错误提示功能 。

  1. 设置Listener方式:
edit_text.addTextChangedListener(new TextWatcher() {
      @Override
      public void beforeTextChanged(CharSequence s, int start, int count, int after) {
          LogUtil.showLog("Css", s);  //这里的s指:在用户输入之前,EditText中“所有的”文本信息
      }

      @Override public void onTextChanged(CharSequence s, int start, int before, int count) {
      }

      @Override public void afterTextChanged(Editable s) {
          LogUtil.showLog("Css2", s); //这里的s指,在用户输入之后,EditText中“所有的”文本信息
      }
  });

注意:上边这种方式无法实现对EditText内容的修改,只能监听提示。

  1. Fileter方式:
/*
* 禁止输空格+换行键
*/
editText.setFilters(new InputFilter[]{filter});
private InputFilter filter=new InputFilter() {
   @Override
   public CharSequence filter(CharSequence source, int start, int end, Spanned dest, int dstart, int dend) {
      ////这里的source指,在用户输入时,EditText中单次变化的字符
      if(source.equals(" ") || source.toString().contentEquals("\n"))return "";
      else return null;  // 或者写成else return source;效果相同
   }
};

/**
  * 禁止EditText输入特殊字符
  */
 public static void setEditTextInhibitInputSpeChat(EditText editText){
  InputFilter filter=new InputFilter() {
   @Override
   public CharSequence filter(CharSequence source, int start, int end, Spanned dest, int dstart, int dend) {
    String speChat="[`~!@#$%^&*()+=|{}':;',\\[\\].<>/?~!@#¥%……&*()——+|{}【】‘;:”“'。,、?]";
    Pattern pattern = Pattern.compile(speChat);
    Matcher matcher = pattern.matcher(source.toString());
    if(matcher.find())return "";
    else return null;
   }
  };
  editText.setFilters(new InputFilter[]{filter});
 }

注意:Filter方式能对输入的内容做限定和修改;

  1. digits 属性限定输入内容:
方法一:直接在布局中添加属性
    android:digits = "abcdef"

方法二:代码设置方式
    EditText mEditText = (EditText)findViewById(R.id.MyEditText);
    String digits = "abcdef";   //限定只能输入a-f中的字符,可重复
    mEditText.setKeyListener(DigitsKeyListener.getInstance(digits));

注意:digits限定了只能输入那些字符

  1. 使用TextInputLayout:
    它能让用户输入后,hint不会消失,会让hint变成一个在EditText上方的浮动标签。同时还包括一个漂亮的material动画,例子如下:

    • 布局中代码

      
         
       
      
      
      
    • 在代码中设置

       final TextInputLayout usernameWrapper = (TextInputLayout)findViewById(R.id.usernameWrapper);
       final TextInputLayout passwordWrapper = (TextInputLayout)findViewById(R.id.passwordWrapper);
       //内容为空时设置hint提示
       usernameWrapper.setHint("Username");
       passwordWrapper.setHint("Password");
       
       public void onClick(View v) {
           hideKeyboard();
           if (!validateEmail(username)) {
                //被触发时,在上方显示的输入错误提示
                usernameWrapper.setError("Not a valid email address!");
            } else if (!validatePassword(password)) {
               passwordWrapper.setError("Not a valid password!");
           } else {
              usernameWrapper.setErrorEnabled(false);
              passwordWrapper.setErrorEnabled(false);
              doLogin();
           }
      }
      
      
  2. 其他:
    对输入框限定中,我们常常要使用正则,这里就直接给出了:

纯数字:^\d+$
纯字母:^[a-zA-Z]+$
纯特殊字符:^[@#$%^&]+$  ps:特殊字符看你定义的标准是什么
字母+数字:^(?!\d+$)(?![a-zA-Z]+$)[a-zA-Z\d]+$
字母+特殊字符:^(?![a-zA-Z]+$)(?![@#$%^&]+$)[a-zA-Z@#$%^&]+$
数字+特殊字符:^(?!\d+)(?![@#$%^&]+$)[\d@#$%^&]+$
字母+数字+特殊字符:^(?!\d+$)(?![a-zA-Z]+$)(?![@#$%^&]+$)[\da-zA-Z@#$%^&]+$ 

强:字母+数字+特殊字符 
 ^(?![a-zA-z]+$)(?!\d+$)(?![!@#$%^&*]+$)(?![a-zA-z\d]+$)(?![a-zA-z!@#$%^&*]+$)(?![\d!@#$%^&*]+$)[a-zA-Z\d!@#$%^&*]+$ 

中:字母+数字,字母+特殊字符,数字+特殊字符
 ^(?![a-zA-z]+$)(?!\d+$)(?![!@#$%^&*]+$)[a-zA-Z\d!@#$%^&*]+$

弱:纯数字,纯字母,纯特殊字符
 ^(?:\d+|[a-zA-Z]+|[!@#$%^&*]+)$ 

你可能感兴趣的:(EditText之筛选和提示)