TextInputLayout错误颜色未被清除?

时间:2015-12-23 10:58:54

标签: android android-edittext textinputlayout

我有一个带有EditText的TextInputLayout。

这是我的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(&#34; ERROR&#34;)时,标签(提示)颜色和EditText的底线颜色变为红色并出现错误。这是我期望的行为。

现在让我们说在销毁我的活动之前我不会调用 setError(null)。现在我再次打开相同的活动。我可以看到我的应用程序里面的所有EditText字段的底线都是红色的,虽然标签颜色似乎被重置并且错误消息被取消。这并不总是可以重复,但如果我继续尝试,我最终可以得到它。

我使用的是带有5.1.1的Nexus 4.

我做错了吗?

4 个答案:

答案 0 :(得分:5)

这是由于AppCompat库中的错误

  

elyess.a报道... @ gmail.com,2015年10月19日使用设计支持   图书馆23.1.0

     

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

     
      
  • 一个TIL上的SetError(即一种形式)
  •   
  • TIL有一个红色下划线(ok)
  •   
  • 向后导航并再次输入活动。或者使用TIL转到另一个活动。
  •   
     

发生了什么事。

     
      
  • 即使在其他活动中,所有TIL都有红色下划线。 (但没有错误文字)。
  •   
  • 仅在强行关闭应用程序后,红色下划线才会消失。
  •   

此处也有报道:

2015年11月11日问题状态已更改为FutureRelease,因此我们希望很快能够修复此问题。

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

答案 1 :(得分:0)

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

答案 2 :(得分:0)

同样的问题对我有用的是将我的主题改为Theme.Design.*。 资料来源:Issue 202051: UnsupportedOperationException in TextInputLayout's counter

答案 3 :(得分:0)

正如@Richard所说,这是一个错误。 Issue 190829: TextInputLayout setError causes all TILs in the app to have red underline

我使用了将常量状态设置回背景的解决方案。您可以使用自己的自定义类扩展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。我没有经历任何副作用。