/**
* 内部类实现TextWatcher
*/
private class MyTextWatcher implements TextWatcher{
private EditText editText;
private TextInputLayout textInputLayout;
private MyTextWatcher(EditText editText,TextInputLayout textInputLayout) {
this.editText = editText;
this.textInputLayout = textInputLayout;
}
@Override
public void beforeTextChanged(CharSequence s, int start, int count, int after) {
}
@Override
public void onTextChanged(CharSequence s, int start, int before, int count) {
String text = s.toString();
Log.i(TAG, "onTextChanged: ");
if (text.trim().equals("")){
//### textInputLayout.setErrorEnabled(false);//使用这个方法来控制显隐藏,在api 23下有bug 再改成true时 error信息不再显示
textInputLayout.setError(null);
//使用这个方法来控制显隐藏
if (textInputLayout.getChildCount() == 2){
textInputLayout.getChildAt(1).setVisibility(View.GONE);
}
return;
}
switch (editText.getId()){
case R.id.id_et_phone:
if (!RegexUtil.checkMobileNewSimple(text)){
// textInputLayout.setErrorEnabled(true);//使用这个方法来控制显隐藏,在api 23下有bug 再改成true时 error信息不再显示
textInputLayout.setError("请填写正确的手机号码");
//使用这个方法来控制显隐藏
if (textInputLayout.getChildCount() == 2){
textInputLayout.getChildAt(1).setVisibility(View.VISIBLE);
}
Log.i(TAG, "onTextChanged: 手机号格式不正确");
}else{
//textInputLayout.setErrorEnabled(false);
textInputLayout.setError(null);
//使用这个方法来控制显隐藏
if (textInputLayout.getChildCount() == 2){
textInputLayout.getChildAt(1).setVisibility(View.GONE);
}
}
break;
case R.id.id_et_email:
if (!RegexUtil.checkEmail(text)){
// textInputLayout.setErrorEnabled(true);
textInputLayout.setError("请填写正确的邮箱");
//使用这个方法来控制显隐藏
if (textInputLayout.getChildCount() == 2){
textInputLayout.getChildAt(1).setVisibility(View.VISIBLE);
}
Log.i(TAG, "onTextChanged: 邮箱格式不正确");
}else{
// textInputLayout.setErrorEnabled(false);
textInputLayout.setError(null);
//使用这个方法来控制显隐藏
if (textInputLayout.getChildCount() == 2){
textInputLayout.getChildAt(1).setVisibility(View.GONE);
}
}
break;
case R.id.id_et_frsfzhm:
if (!RegexUtil.checkIdCardNewSimple(text)){
// textInputLayout.setErrorEnabled(true);
textInputLayout.setError("请填写正确的身份证号码");
//使用这个方法来控制显隐藏
if (textInputLayout.getChildCount() == 2){
textInputLayout.getChildAt(1).setVisibility(View.VISIBLE);
}
Log.i(TAG, "onTextChanged: 身份证号码格式不正确");
}else{
// textInputLayout.setErrorEnabled(false);
textInputLayout.setError(null);
//使用这个方法来控制显隐藏
if (textInputLayout.getChildCount() == 2){
textInputLayout.getChildAt(1).setVisibility(View.GONE);
}
}
break;
}
}
@Override
public void afterTextChanged(Editable s) {
String text = s.toString();
}
}
id_et_xxx.addTextChangedListener(new MyTextWatcher(id_et_xxx,id_til_xxx));
还有就是 2016年9月14日10:05:50补充
//Android官网bug fix log
https://developer.android.com/topic/libraries/support-library/revisions.html
Changes for Design Support Library:
Fixed an issue where TextInputLayout doesn’t clear error tint after setErrorEnabled(false) on API level 21 - 22 (Issue 202829)