17

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

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

如果我使用 setError(null) 删除错误消息,则消息将被删除,但空间仍然存在。这显然是每个谷歌的设计(见https://code.google.com/p/android/issues/detail?id=176005)。我非常希望删除这个空间,因为它使 UI 看起来非常错误。

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

4

2 回答 2

29

从支持库版本 23.1.1(可能更早)开始,情况将不再如此。如果错误不为空或为空,您应该能够调用TextInputLayout.setErrorEnabled(false)以隐藏错误 TextView 并在TextInputLayout.setError(error)内部调用 now 。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);
    }
    ...
}
于 2016-02-02T20:06:04.510 回答
6

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

@Override
    public void onTextChanged(CharSequence s, int start, int before, int count) {
        if(mobileNoInputLayout.isErrorEnabled()){
            mobileNoInputLayout.setErrorEnabled(false);
        }
    }
于 2018-03-21T14:11:03.143 回答