Zum ersten Mal benutze ich das neue Android-Widget TextInputLayout, es ist sehr nett, aber ich habe ein Problem mit der setError-Methode
das ist mein XML
%Vor%WAS GESCHIEHT:
wenn ich renne
%Vor%Die gesamte EditText Hintergrund- und Hinweistextfarbe wird rot und da ist es in Ordnung. Das Problem ist, wenn ich
ausführen %Vor%Der Stil des EditText ist komplett gegenüber dem Original geändert.
Anfangssituation:
NACH setError("mandatory field")
NACH setError(null)
Ich habe viele Nachforschungen angestellt, konnte aber nichts hilfreiches finden, was zur Hölle sollte das Problem sein?
AKTUALISIEREN
Untersucht im android Quellcode von setError()
Methode fand ich das
und Debuggen des Codes Ich habe festgestellt, dass der Code, der in updateEditTextBackground()
ausgeführt wird, der folgende ist
Anscheinend ersetzt Androide den Hintergrundfarbton des EditText. Ich habe versucht, eine Datei in meinem Zeichnungsordner abc_edit_text_material.xml mit diesem Code zu erstellen
%Vor% aber das ist das Ergebnis nach setError(null)
Außerdem habe ich gemerkt, dass das Problem nur existiert, wenn ich setError ("error message") und dannError (null)
starteUPDATE 2 Dies ist der Code, mit dem ich meine Eingaben validiere
%Vor%Ich werde verrückt !!!
Ich stieß auf ein ähnliches Problem und fand eine einfache Lösung dafür. Dieses Problem tritt auf, wenn wir einen benutzerdefinierten Hintergrund als Zeichen / Farbe auf EditText
in TextInputLayout
setzen. Eine Lösung wäre, die TextInputLayout
abzuleiten und die Methoden setError()
und drawableStateChanged()
zu überschreiben und unsere benutzerdefinierte Zeichnungsfarbe als EditText's
background wieder festzulegen. Zum Beispiel hatte ich eine abgerundete Ecke für meinen EditText's
Hintergrund, unten ist meine Unterklasse,
Und dann verwenden Sie Ihre benutzerdefinierte Klasse in der XML,
%Vor%Hoffe, das hilft. Happy Android Codierung:)
Dies war ein Fehler in support:design:23.2.0
(und möglicherweise älteren Versionen), der als Problem gemeldet wurde hier
und wurde in der 23.3.0
Aktualisierung
Ich habe einen Trick, um dieses Problem einfach zu lösen:
1, new a class erweitern android.support.design.widget.TextInputEditText; 2, überholen getBackground () -Methode, machen es Null zurückgeben;
weil die Methode updateEditTextBackground () in TextInputLayout beurteilen wird, ob der Hintergrund von editText drawable null ist und jetzt immer null zurückgibt, Ergebnis ist editText's Hintergrund wird nicht durch die Farbe des Fehlertextes geändert.
Tags und Links android android-textinputlayout