我有什么
我有一个注册表单,我使用TextWatcher
进行验证。我使用了TextInputLayout
支持库来突出显示错误
我的问题
当我在EditText
输入错误数据时,TextInputLayout
会将EditText
变为red
颜色
然后,当我在EditText
中输入正确的输入时,将focus
更改为其他字段,仍然第一个EditText
为红色未更改为正常editext背景
我尝试了什么
我尝试以编程方式将EditText
的背景设置为我的自定义绘图,但它给出了我的其他外观和感觉(其他颜色)
还尝试在不使用HintColor
方法的情况下仅将TextInputLayout
更改为setError()
的红色,仍然不是结果
我的代码
第一种方法:给我一些其他颜色的背景
public boolean validateFirstName() {
mFirstName = edFirstName.getText().toString().trim();
if (mFirstName.isEmpty()) {
tiFirstName.setError(mEmptyFields);
edFirstName.requestFocus();
return false;
} else {
tiFirstName.setError(null);
tiFirstName.setErrorEnabled(false);
edFirstName.setBackground(getResources().getDrawable(R.drawable.ed_line_bg));
}
return true;
}
第二种方法:未见变化:(
public boolean validateFirstName() {
mFirstName = edFirstName.getText().toString().trim();
if (mFirstName.isEmpty()) {
edFirstName.requestFocus();
changeTextInputLayoutColorToRed(tiFirstName);
return false;
} else {
changeTextInputLayoutColorToNormal(tiFirstName);
edFirstName.setBackground(null);
}
return true;
}
public void changeTextInputLayoutColorToRed(TextInputLayout textInputLayout){
int redColor=getResources().getColor(android.R.color.holo_red_dark);
// textInputLayout.getEditText().setHighlightColor(redColor);
textInputLayout.getEditText().setHintTextColor(redColor);
textInputLayout.setError(mErrorMessage);
textInputLayout.setErrorEnabled(true);
}
public void changeTextInputLayoutColorToNormal(TextInputLayout textInputLayout){
int normalColor=getResources().getColor(R.color.text_color);
//textInputLayout.getEditText().setHighlightColor(normalColor);
textInputLayout.getEditText().setHintTextColor(normalColor);
textInputLayout.setError(null);
textInputLayout.setErrorEnabled(false);
}
答案 0 :(得分:0)
我使用TextWatcher作为验证的以下内容:
UTF-8
我将它添加到onCreate活动方法的editText中:
private class RegisterTextWatcher implements 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) {
switch (editText.getId()){
case R.id.name_input:
validateName();
break;
...
}
}
}
我的验证:
inputName.addTextChangedListener(new RegisterTextWatcher(inputName));