【问题标题】:TextInputLayout removes EditText style after setting setError property to nullTextInputLayout 将 setError 属性设置为 null 后删除 EditText 样式
【发布时间】:2016-03-04 15:27:51
【问题描述】:

我想在我的新应用中使用 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)之前设置的。

【问题讨论】:

  • 实际上是在哪里设置两种颜色
  • @Sree ,抱歉哪些颜色?
  • 我的意思是红色和另一个
  • 错误跨度的红色来自 TextInputLayout 标准颜色。调用 setError(null) 后的另一种颜色我无法理解它来自哪里
  • 所以如果你找到一个条目,最好再次为文本和背景设置你想要的颜色

标签: android


【解决方案1】:

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-08-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-09-02
    相关资源
    最近更新 更多