删除错误消息时未删除 TextInputLayout 的 errorview

TextInputLayout's errorview is not removed when removing error message

我有一个带有一些输入字段的垂直线性布局。使用 TextInputLayout 我得到了带有标签和内置错误消息的良好流程。我的问题是当我添加和删除错误消息时。

如果我添加一条错误消息,它位于编辑文本下方,一切看起来都不错。

如果我使用 setError(null) 删除错误消息,消息将被删除,但 space 仍然存在。这显然是按照谷歌的设计(参见 https://code.google.com/p/android/issues/detail?id=176005)。我非常希望删除此 space,因为它会使 UI 看起来很不对劲。

如果我执行 .setErrorEnabled(false),视图将被删除,一切看起来又恢复正常了。但是,如果用户更改数据并且我执行另一个 setError,则不会显示错误消息(只有编辑文本行是红色的)。

从支持库版本 23.1.1(可能更早)开始,情况将不再如此。您应该能够调用 TextInputLayout.setErrorEnabled(false) 来隐藏错误 TextView,如果错误不为 null 或为空,则调用 TextInputLayout.setError(error) 现在会在内部调用 TextInputLayout.setErrorEnabled(true)。请参阅下面的代码片段,摘自支持库:

public void setError(@Nullable CharSequence error) {
    if (!mErrorEnabled) {
        if (TextUtils.isEmpty(error)) {
            // If error isn't enabled, and the error is empty, just return
            return;
        }
        // Else, we'll assume that they want to enable the error functionality
        setErrorEnabled(true);
    }
    ...
}

对我来说,下面的代码工作正常。

@Override
    public void onTextChanged(CharSequence s, int start, int before, int count) {
        if(mobileNoInputLayout.isErrorEnabled()){
            mobileNoInputLayout.setErrorEnabled(false);
        }
    }