TextInputLayout setErrorEnabled不会创建新的TextView对象

时间:2015-10-20 07:34:02

标签: android layout textview android-textinputlayout

我在创建登录表单时发现了一个问题。我在TextInputLayout上显示一些错误,并在用户正确填写内容时禁用它们。

error example

我用

设置它
mTextInputLayout.setError("This field is required");

并使用

禁用它
mTextInputLayout.setError(null);

问题是仍有空TextView对象的填充,显示错误消息。所以我试着通过设置

完全禁用错误
mTextInputLayout.setErrorEnabled(false);

它工作和看起来很好,但我不能再次设置它。致电时

mTextInputLayout.setErrorEnabled(true);
mTextInputLayout.setError("This field is required");

我再次看到一条读取行,而不是错误消息,所以看起来显示错误消息的TextView被破坏而不是再次创建。

我读了here,当调用setErrorEnabled(false)时,TextView对象被破坏,似乎不再创建它。错误或功能?

  

此控件的源代码尚未在AOSP中提供,因此我使用内置于Android Studio的反编译器来检查代码以了解出现了什么问题。我发现setErrorEnabled()实际上创建并销毁了一个TextView对象,而我希望它只是切换可见性。

3 个答案:

答案 0 :(得分:10)

如果有人遇到同样的问题,我发现一个工作正常的解决方法。 只需设置错误TextView对象的可见性,不要破坏对象。

使用此选项启用错误消息:

if (textInputLayout.getChildCount() == 2)
    textInputLayout.getChildAt(1).setVisibility(View.VISIBLE);

textInputLayout.setError("This field is required");

这用于禁用错误消息:

textInputLayout.setError(null);

if (textInputLayout.getChildCount() == 2)
    textInputLayout.getChildAt(1).setVisibility(View.GONE);

答案 1 :(得分:0)

从支持库版本23.1.1开始(可能更早),调用setErrorEnabled(false)将删除错误TextView,并在随后调用setError(String)时导致TextInputLayout显示新错误。

但是,仍然存在一个错误,即一旦清除错误消息,就不会从布局中删除额外的填充。使用@dabo上面的帖子可以解决这个错误:

https://code.google.com/p/android/issues/detail?id=200137

答案 2 :(得分:0)

在我的情况下设置错误,清除错误和再次设置错误导致错误。一条线不再变红(API 23.4.0)。此解决方案有助于:TextInputLayout.setError() leaves empty space after clearing the error

setErrorEnabled(false)之后致电setError(null)