【问题标题】:TextInputLayout's errorview is not removed when removing error messageTextInputLayout的errorview在删除错误信息时没有被删除
【发布时间】:2016-02-07 17:27:43
【问题描述】:

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

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

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

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

【问题讨论】:

  • 你是在调用 TextInputLayout 或 EditText 的 setError() 方法吗?
  • textinputlayout 上的所有内容。
  • 尝试调用EditText的setError ...
  • EditText 上的 setError 有效,但此错误看起来完全不同。它会给出一个红色感叹号,并在 UI 上弹出一个错误,而不是在输入下方显示一个漂亮的红色标签。

标签: android android-design-library android-textinputlayout


【解决方案1】:

对我来说,下面的代码运行良好。

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

【讨论】:

    【解决方案2】:

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

    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);
        }
        ...
    }
    

    【讨论】:

    • 谢谢。这现在效果更好。以前我寻找 TextInputLayout 的孩子并将可见性设置为消失。现在您可以简单地为新错误执行 input.setError(..) 并使用 input.setErrorEnabled(false) 将其删除。来回工作。只做 input.setError(null) 还是不错的,但你不能拥有一切。
    • 就我而言,我必须同时执行 input.setError(null) 和 input.setErrorEnabled(false) 才能正常工作。
    • 不幸的是,它不适用于 23.2.1 版本。如果您查看该方法的最开头,它会返回如果之前设置了提供的错误字符串: if (TextUtils.equals(mError, error)) { // 如果我们已经有相同的错误,则忽略返回; }
    猜你喜欢
    • 2017-11-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多