删除错误消息时未删除 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);
}
}
我有一个带有一些输入字段的垂直线性布局。使用 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);
}
}