2015-12-23 9 views
6

Ich habe ein TextInputLayout mit einem EditText darin.TextInputLayout-Fehlerfarbe wird nicht gelöscht?

Das ist mein xml:

<android.support.design.widget.TextInputLayout 
    android:id="@+id/textInputLayout" 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content"> 

    <EditText 
     android:id="@+id/editText" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:hint="Enter Text" /> 

</android.support.design.widget.TextInputLayout> 

Mein Java-Code:

((TextInputLayout) findViewById(R.id.textInputLayout)).setError("ERROR"); 

Als ich setError ("ERROR") nennen, das und das Etikett (Hint) Farbe und Unterseite des EditText Linienfarbe wird rot und der Fehler erscheint. Das ist das Verhalten, das ich erwarte.

Jetzt sagen wir nicht setError (null) vor dem Zerstören meiner Aktivität. Jetzt öffne ich die gleiche Aktivität wieder. Ich sehe, dass die untere Zeile für alle EditText-Felder innerhalb meiner Anwendung rot bleibt, obwohl die Label-Farbe zurückgesetzt zu sein scheint und die Fehlermeldung abgewiesen wird. Dies ist nicht immer reproduzierbar, aber wenn ich es weiter versuche, kann ich es schließlich bekommen.

Ich verwende ein Nexus 4 mit 5.1.1.

Mache ich etwas falsch?

+0

Es sollte das Layout neu erstellen und ich verstehe nicht, warum erhalten Sie rote Linie auch nach der Zerstörung der Aktivität. Kannst du etwas mehr Code posten? – Mangesh

+0

Hey Mann, hast du das gelöst. Meins auch gleich –

Antwort

5

Dies liegt an einem Fehler in der AppCompat-Bibliothek.

Berichtet von elyess.a ... @ gmail.com, 19. Oktober 2015 Design Mit Unterstützung Bibliothek 23.1.0

Schritte, das Problem zu reproduzieren (einschließlich Beispielcode falls zutreffend).

  • SetError auf einer TIL (das heißt in einer Form)
  • Die TIL ist rot unterstrichen (ok)
  • Navigieren hin und die Aktivität erneut eingeben. Oder gehen Sie zu einer anderen Aktivität mit TILs.

Was ist passiert.

  • Alle TILs haben eine rote Unterstreichung, auch in anderen Aktivitäten. (aber kein Fehlertext).
  • Die roten Unterstreichungen verschwinden erst, nachdem die App geschlossen wurde.

Auch hier berichtet:


Ausgabe-Status wurde auf FutureRelease am 11. November 2015 geändert, so können wir hoffen, bald für ein Update kommen.

In der Zwischenzeit scheint es, gibt es drei Lösungen:

0

Dieses Problem auf Version 23.1.1 des com.android.support gelöst: ... Bibliotheken

0

Wie @Richard sagte, ist es ein Fehler. Issue 190829: TextInputLayout setError causes all TILs in the app to have red underline

Ich habe die Lösung verwendet, um den konstanten Zustand zurück in den Hintergrund zu setzen. Sie können nur die TextInputLayout mit Ihrem eigenen Klasse erweitern, wo Sie die setError() -Methode außer Kraft setzen:

public class CustomTextInputLayout extends TextInputLayout { 

    // Constructors... 

    @Override 
    public void setError(@Nullable CharSequence error) { 

     super.setError(error); 
     if ((getEditText() != null && getEditText().getBackground() != null) && 
      (Build.VERSION.SDK_INT == 22 || Build.VERSION.SDK_INT == 21)) { 
      Drawable drawable = getEditText().getBackground().getConstantState().newDrawable(); 
      getEditText().setBackgroundDrawable(drawable); 
     } 
    } 
} 

Und dann diese Klasse ich Wiederverwendung für EditTexts Verpackung. Ich habe keine Nebenwirkungen erlebt.

Verwandte Themen