我想在我的新应用中使用TextInputLayout。我有这样的布局
***
<android.support.design.widget.TextInputLayout
android:id="@+id/input_layout_email"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginBottom="8dp"
android:textColorHint="@color/text_color"
app:hintTextAppearance="@style/HintTextAppearance.TextInputLayout"
app:errorTextAppearance="@style/ErrorTextAppearance.TextInputLayout">
<EditText
android:id="@+id/input_email"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:inputType="textEmailAddress"
android:hint="@string/hint_email"
android:background="@drawable/edit_text_border_radius"
android:padding="10dp"
android:drawableLeft="@drawable/ic_acc"/>
</android.support.design.widget.TextInputLayout>
***
在我的活动中,我的验证如下:
private boolean validatePassword() {
if (inputPassword.getText().toString().trim().isEmpty()) {
inputLayoutPassword.setError(getString(R.string.err_msg_password));
requestFocus(inputPassword);
return false;
} else {
inputLayoutPassword.setError(null);// it removes @drawable/edit_text_border_radius style from EditText
inputLayoutPassword.setErrorEnabled(false);
}
return true;
}
不正常。但好像你注意到我已经为EditText声明了@ drawable / edit_text_border_radius资源。如果我第一次不填写密码字段,它将改变背景颜色为红色。因为它是TextInputLayout错误范围的默认颜色。但是如果我用一些值填充相同的字段,那么红色错误跨度消失但EditText元素忘记它是之前设置为它的后台资源(@ drawable / edit_text_border_radius)。
答案 0 :(得分:2)
不确定您是否找到了问题的解决方案,但我遇到了同样的问题。
深入了解TextInputLayout
来源,特别是清除错误消息的逻辑,看起来EditText
清除了它的背景颜色过滤器(在我的情况下,它变黑了) )。
我同时提出的快速而肮脏的解决方案是手动将背景过滤器重置为所需的颜色:
private boolean validatePassword() {
if (inputPassword.getText().toString().trim().isEmpty()) {
inputLayoutPassword.setError(getString(R.string.err_msg_password));
requestFocus(inputPassword);
return false;
} else {
inputLayoutPassword.setError(null);// it removes @drawable/edit_text_border_radius style from EditText
inputLayoutPassword.setErrorEnabled(false);
// manually resetting the background color filter of edit text
if(inputLayoutPassword.getEditText() != null) {
if(inputLayoutPassword.getEditText().getBackground() != null) {
inputLayoutPassword.getEditText()
.getBackground()
.setColorFilter(
ContextCompat.getColor(getActivity(), R.color.some_color),
PorterDuff.Mode.SRC_IN
);
}
}
}
return true;
}