我有一个带有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.
我做错了吗?
答案 0 :(得分:5)
这是由于AppCompat库中的错误。
elyess.a报道... @ gmail.com,2015年10月19日使用设计支持 图书馆23.1.0
重现问题的步骤(如果适用,还包括示例代码)。
- 一个TIL上的SetError(即一种形式)
- TIL有一个红色下划线(ok)
- 向后导航并再次输入活动。或者使用TIL转到另一个活动。
发生了什么事。
- 即使在其他活动中,所有TIL都有红色下划线。 (但没有错误文字)。
- 仅在强行关闭应用程序后,红色下划线才会消失。
此处也有报道:
2015年11月11日问题状态已更改为FutureRelease
,因此我们希望很快能够修复此问题。
与此同时,似乎有3种解决方法:
EditText
to the top of your layout EditText
editText.setBackground(editText.getBackground().getConstantState().newDrawable())
答案 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。我没有经历任何副作用。