web-dev-qa-db-ja.com

エラーメッセージを削除しても、TextInputLayoutのエラービューは削除されません

いくつかの入力フィールドがある垂直線形レイアウトがあります。 TextInputLayoutを使用すると、ラベルと組み込みのエラーメッセージを含むNiceフローが得られます。私の問題は、エラーメッセージを追加および削除するときです。

エラーメッセージを追加すると、編集テキストの下に配置され、すべてが正常に表示されます。

SetError(null)を使用してエラーメッセージを削除すると、メッセージは削除されますが、スペースはまだ残っています。これは明らかにグーグルの設計によるものです( https://code.google.com/p/Android/issues/detail?id=176005 を参照)。 UIが非常に間違って見えるので、このスペースを削除してください。

.setErrorEnabled(false)を実行すると、ビューが削除され、すべてが再び正常に見えます。ただし、ユーザーがデータを変更し、別のsetErrorを実行すると、エラーメッセージは表示されません(編集テキスト行のみが赤になります)。

11
Gober

サポートライブラリバージョン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);
    }
    ...
}
23
TheIT

私にとって、以下のコードは正常に機能しています。

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