17

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

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

setError(null) でエラー メッセージを削除すると、メッセージは削除されますが、スペースはまだ残っています。これは明らかにGoogleの設計によるものです(https://code.google.com/p/android/issues/detail?id=176005を参照)。UI の見栄えが非常に悪くなるため、このスペースを削除していただきたいと思います。

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

4

2 に答える 2

29

サポート ライブラリ バージョン 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);
    }
    ...
}
于 2016-02-02T20:06:04.510 に答える
6

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

@Override
    public void onTextChanged(CharSequence s, int start, int before, int count) {
        if(mobileNoInputLayout.isErrorEnabled()){
            mobileNoInputLayout.setErrorEnabled(false);
        }
    }
于 2018-03-21T14:11:03.143 に答える