gpt4 book ai didi

android - 将 setError 属性设置为 null 后,TextInputLayout 删除了 EditText 样式

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:02:37 25 4
gpt4 key购买 nike

我想在我的新应用中使用 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>
***

在我的 Activity 中,我有如下验证:

    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)之前设置它。

最佳答案

不确定您是否找到了解决问题的方法,但我刚遇到了同样的问题。

深入研究 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;
}

关于android - 将 setError 属性设置为 null 后,TextInputLayout 删除了 EditText 样式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32842156/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com