清除错误后,TextInputLayout.setError()会留空空格

Man*_*esh 54 android android-textinputlayout

我最近使用过TextInputLayout它的setError()方法.我得到的问题是,当我通过调用setError(null)它来清除错误时,会在底部留下如此多的空白空间.

正常:

正常

有错误:

有错误

清除错误后:

清除错误后

在查看源代码后,我发现他们正在制作视图INVISIBLE而不是GONE

.setListener(new ViewPropertyAnimatorListenerAdapter() {
@Override
public void onAnimationEnd(View view) {
    view.setVisibility(INVISIBLE); // here it is

    updateLabelVisibility(true);
} }).start();
Run Code Online (Sandbox Code Playgroud)

我想知道为什么会这样?如何解决这个问题以避免空白?

har*_*thk 123

查看文档

public void setErrorEnabled (boolean enabled)
Run Code Online (Sandbox Code Playgroud)

它说

是否在此布局中启用了错误功能.在通过setError(CharSequence)设置错误消息之前启用此功能将意味着在显示错误时此布局不会更改大小.

那么在此基础上,尝试设置setErrorEnabled(true)之前setError(),和设置setErrorEnabled(false)setError(null).

  • 你是对的.感谢您指出了这一点.但它仍占用大量空间,而且在预览布局时也无法预测.我仍然不明白为什么他们这样做. (2认同)
  • setError 在内部调用 setErrorEnabled(true) (2认同)

小智 50

方法setErrorEnabled(false)将清除额外的空间,所以在之后调用它setError(null).


Nee*_*ela 5

不要使用setErrorEnabled(boolean),它只是没有显示第二次的错误。

public class MyTextInputLayout extends android.support.design.widget.TextInputLayout {

public MyTextInputLayout(Context context) {
    super(context);
}

public MyTextInputLayout(Context context, AttributeSet attrs) {
    super(context, attrs);
}

public MyTextInputLayout(Context context, AttributeSet attrs, int defStyleAttr) {
    super(context, attrs, defStyleAttr);
}

@Override
public void setError(@Nullable CharSequence error) {
    super.setError(error);

    View layout = getChildAt(1);
    if (layout != null) {
        if (error != null && !"".equals(error.toString().trim())) {
            layout.setVisibility(VISIBLE);
        } else {
            layout.setVisibility(GONE);
        }
    }
}
}
Run Code Online (Sandbox Code Playgroud)

然后只是setError(errorMessage);setError(null);