8

いくつかの入力フィールドを持つ垂直線形レイアウトがあります。 TextInputLayoutを使う私はラベルと組み込みのエラーメッセージで素敵な流れを得る。私の問題は、エラーメッセージを追加して削除するときです。エラーメッセージを削除するときにTextInputLayoutのエラービューが削除されない

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

setError(null)でエラーメッセージを削除すると、メッセージは削除されますが、スペースはまだ残ります。これは明らかにグーグルデザインによるものです(https://code.google.com/p/android/issues/detail?id=176005参照)。私は非常にUIの外観が非常に間違っているようにこのスペースを削除したいと思います。

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

+0

あなたがTextInputLayoutかのEditTextのSETERROR()mehtodを呼び出していますか..? – Moinkhan

+0

すべてがtextinputlayoutにあります。 – Gober

+0

EditTextのsetErrorを呼び出してみてください... – Moinkhan

答えて

20

サポートライブラリバージョン23.1.1(およびそれ以前のバージョン)では、これはもはや該当しません。 TextInputLayout.setErrorEnabled(false)に電話してエラーTextViewを隠すことができ、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); 
    } 
    ... 
} 
+1

ありがとうございます。これは今より良く機能します。以前私はTextInputLayoutの子を探し、可視性をなくすように設定しました。これで、新しいエラーに対してはinput.setError(..)を、削除するにはinput.setErrorEnabled(false)を実行するだけです。作品は前後に動きます。まだinput.setError(null)を実行するのはいいですが、すべてを持つことはできません。 – Gober

+1

私の場合、正しく動作するためには、input.setError(null)とinput.setErrorEnabled(false)の両方を行う必要がありました。 – User31689

+1

残念ながら、バージョン23.2.1では動作しません。メソッドの最初の部分を見ると、指定されたエラー文字列が以前に設定されていれば返されます。 if(TextUtils.equals(mError、error)){ //同じエラーが既に発生している場合は、無視してください return; } – Singed

関連する問題