我在创建登录表单时发现了一个问题。我在TextInputLayout上显示一些错误,并在用户正确填写内容时禁用它们。
我用
设置它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对象,而我希望它只是切换可见性。
答案 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上面的帖子可以解决这个错误:
答案 2 :(得分:0)
在我的情况下设置错误,清除错误和再次设置错误导致错误。一条线不再变红(API 23.4.0)。此解决方案有助于:TextInputLayout.setError() leaves empty space after clearing the error
在setErrorEnabled(false)
之后致电setError(null)
。