6

我有一个 TextInputLayout,里面有一个 EditText。

这是我的xml:

<android.support.design.widget.TextInputLayout
    android:id="@+id/textInputLayout"
    android:layout_width="match_parent"
    android:layout_height="wrap_content">

    <EditText
        android:id="@+id/editText"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:hint="Enter Text" />

</android.support.design.widget.TextInputLayout>

我的java代码:

((TextInputLayout) findViewById(R.id.textInputLayout)).setError("ERROR");

当我调用setError("ERROR")时,标签(提示)颜色和 EditText 的底线颜色变为红色并出现错误。这是我所期望的行为。

现在假设我在销毁我的活动之前不调用setError(null) 。现在我再次打开相同的活动。我可以看到我的应用程序中所有 EditText 字段的底线都保持红色,尽管标签颜色似乎已重置并且错误消息已被忽略。这并不总是可重现的,但如果我继续尝试,我最终会得到它。

我正在使用带有 5.1.1 的 Nexus 4。

难道我做错了什么?

4

4 回答 4

5

这是由于AppCompat 库中的一个错误

由 elyess.a...@gmail.com 报告,2015 年 10 月 19 日 使用设计支持库 23.1.0

重现问题的步骤(如果适用,包括示例代码)。

  • 一个 TIL 上的 SetError(即在一个表单中)
  • TIL 有一条红色下划线(ok)
  • 导航回来并再次进入活动。或者使用 TIL 去另一个活动。

发生了什么。

  • 所有 TIL 都有红色下划线,即使在其他活动中也是如此。(但没有错误文本)。
  • 只有在强制关闭应用程序后,红色下划线才会消失。

还在这里报道:


问题状态已更改为FutureRelease2015 年 11 月 11 日,因此我们希望尽快修复。

与此同时,似乎有3个解决方法:

于 2016-01-13T16:43:44.597 回答
0

此问题已在 com.android.support 的 23.1.1 版本中解决:... 库

于 2016-01-20T15:15:50.187 回答
0

有同样的问题对我有用的是将我的主题更改为从Theme.Design.*. 来源:问题 202051:TextInputLayout 计数器中的 UnsupportedOperationException

于 2016-03-21T13:45:55.153 回答
0

正如@Richard 所说,这是一个错误。 问题 190829:TextInputLayout setError 导致应用程序中的所有 TIL 都有红色下划线

我使用了将恒定状态设置回背景的解决方案。您可以使用您自己的自定义类扩展 TextInputLayout,在其中覆盖 setError() 方法:

public class CustomTextInputLayout extends TextInputLayout {

    // Constructors...

    @Override
    public void setError(@Nullable CharSequence error) {

        super.setError(error);
        if ((getEditText() != null && getEditText().getBackground() != null) &&
            (Build.VERSION.SDK_INT == 22 || Build.VERSION.SDK_INT == 21)) {
            Drawable drawable = getEditText().getBackground().getConstantState().newDrawable();
            getEditText().setBackgroundDrawable(drawable);
        }
    }
}

然后我重用这个类来包装 EditTexts。我没有遇到任何副作用。

于 2016-05-04T13:07:27.587 回答