いくつかの入力フィールドがある垂直線形レイアウトがあります。 TextInputLayoutを使用すると、ラベルと組み込みのエラーメッセージを含むNiceフローが得られます。私の問題は、エラーメッセージを追加および削除するときです。
エラーメッセージを追加すると、編集テキストの下に配置され、すべてが正常に表示されます。
SetError(null)を使用してエラーメッセージを削除すると、メッセージは削除されますが、スペースはまだ残っています。これは明らかにグーグルの設計によるものです( https://code.google.com/p/Android/issues/detail?id=176005 を参照)。 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);
}
}