11

ログインフォームの作成中に問題が見つかりました。ユーザーが何かを正しく入力したときに、TextInputLayout にいくつかのエラーを表示して無効にします。

エラー例

で設定しました

mTextInputLayout.setError("This field is required");

そしてそれを無効にします

mTextInputLayout.setError(null);

問題は、エラー メッセージを表示していた空の TextView オブジェクトのパディングがまだあることです。そこで、設定でエラーを完全に無効にしようとしました

mTextInputLayout.setErrorEnabled(false);

動作し、問題ないように見えますが、再度設定することはできません。通話時

mTextInputLayout.setErrorEnabled(true);
mTextInputLayout.setError("This field is required");

繰り返しますが、エラーメッセージではなく読み取り行が表示されるため、エラーメッセージを表示していた TextView が破棄され、再度作成されていないようです。

ここで、 TextView オブジェクトがsetErrorEnabled(false)呼び出されたときに破棄され、再び作成されないように見えることを読みました。バグまたは機能?

このコントロールのソースは AOSP ではまだ利用できないため、Android Studio に組み込まれている逆コンパイラを使用してコードを調べ、何が問題なのかを理解しました。setErrorEnabled() が実際に TextView オブジェクトを作成および破棄することがわかりましたが、可視性を単に切り替えるだけだと思っていました。

4

3 に答える 3

10

誰かが同じ問題に直面した場合に備えて、うまく機能する回避策を見つけました。エラー TextView オブジェクトの可視性をオンまたはオフに設定するだけで、オブジェクトを破棄しないでください。

エラーメッセージを有効にするためにこれを使用します。

if (textInputLayout.getChildCount() == 2)
    textInputLayout.getChildAt(1).setVisibility(View.VISIBLE);

textInputLayout.setError("This field is required");

そして、これはエラーメッセージを無効にするためのものです:

textInputLayout.setError(null);

if (textInputLayout.getChildCount() == 2)
    textInputLayout.getChildAt(1).setVisibility(View.GONE);
于 2015-10-20T08:36:30.227 に答える
0

サポート ライブラリ バージョン 23.1.1 (およびおそらくそれ以前) では、setErrorEnabled(false) を呼び出すとエラー TextView が削除され、その後 setError(String) が呼び出されたときに TextInputLayout に新しいエラーが表示されます。

ただし、エラー メッセージがクリアされると、追加のパディングがレイアウトから削除されないという既存のバグが依然として存在します。このバグは、上記の @dabo の投稿を使用して回避できます。

https://code.google.com/p/android/issues/detail?id=200137

于 2016-02-02T21:51:31.173 に答える