2016-08-05 3 views
1

Android bereitgestellt ein Widget TextInputLayout https://developer.android.com/reference/android/support/design/widget/TextInputLayout.htmlInputTextLayout, Fehlertext als Helper Texteinstellung (unterschiedlicher Farbe)

Dies könnte bieten Hint und Fehler genannt, die um EditText ausgezeichnete Wrapper ist.

gibt es auch scheinbar eine Leitlinie über sie in https://material.google.com/patterns/errors.html#errors-user-input-errors

Damit zeigen sie Hint und Fehler. Und es hat auch Helper Text. Hier ist es nützlich für die Passwort-Einrichtung. Z.B. Bevor jemand ein Passwort eingibt, wird der ErrorText als HelperText angezeigt, durch eine andere Farbe (in Grau statt Rot wie im Beispiel) unterschieden.

Wenn ich TextInputLayout aus, oder haben die beiden Funktionen

setError(CharSequence error) 

und

setHint(CharSequence hint) 

Allerdings gibt es keine Möglichkeit, das zu HelperText Errortext zu ändern. Habe ich etwas vermisst, oder ist es nur TextInputLayout, das von der Support-Bibliothek zur Verfügung gestellt wird? Gibt es nicht die Funktion, die von Google in der Materialrichtlinie empfohlen wird?

p/s: Ich weiß, wie ErrorText Farbe durch die Einstellung durch den Stil ändern. Aber das hilft nicht, da es sich nicht dynamisch ändern kann, während die App läuft (z. B. den Status von einem Fehler zu einem Helfer ändern und umgekehrt).

Antwort

4

Vorausgesetzt, dass dieses Schema in der Designanleitung erwähnt wird, ist es ein bisschen seltsam, es ist nicht Teil der Standardmethode. Wie auch immer, ich konnte die Farbe basierend auf @Jared Rummlers Antwort über here ändern. Sein Vorschlag ist, Java Reflection zu verwenden, um die schmutzigen Bits zu machen. Zunächst müssen Sie einen Verweis auf Ihre TextInputLayout erhalten und die Fehleransicht aktivieren (sonst wird Reflexion Null-Felder zurück):

final TextInputLayout input = (TextInputLayout) findViewById(R.id.input); 
    input.setErrorEnabled(true); 

Nun rufen wir einen Fehler Farbänderungsverfahren wie folgt definieren:

public void setErrorTextColor(TextInputLayout textInputLayout, int color) { 
     try { 
      Field fErrorView = TextInputLayout.class.getDeclaredField("mErrorView"); 
      fErrorView.setAccessible(true); 
      TextView mErrorView = (TextView) fErrorView.get(textInputLayout); 
      Field fCurTextColor = TextView.class.getDeclaredField("mCurTextColor"); 
      fCurTextColor.setAccessible(true); 
      fCurTextColor.set(mErrorView, color); 
     } catch (Exception e) { 
      e.printStackTrace(); 
     } 
    } 

Dies ändert im Wesentlichen die Farbe von TextInputLayout's unterstreichen und die Fehlermeldung. Aber da sie nach den Richtlinien sowieso gleich sind, passt das zu unserem Szenario. Dies bedeutet, dass unsere Helfer Text anzuzeigen, ändern wir einfach die Farbe auf einem grauen etwas und rufen setError() darauf wie folgt:

setErrorTextColor(input, ContextCompat.getColor(getContext(), android.R.color.darker_gray)); 
    input.setError("Funk you!"); 

Das sollte es tun. Denken Sie daran, die Farbe in Rot zu ändern, wenn Sie den Fehler anzeigen möchten.

+0

Vielen Dank!Das funktioniert. Versuchen, Reflexion zu vermeiden. – Elye

+0

@Elye ja, sogar ich wünschte, wir sollten nicht auf etwas für diese grundlegende zurückgreifen müssen. – Shaishav

+0

Gefunden eine Version, die ohne die Notwendigkeit der Reflexion verwendet werden könnte. Stellen Sie es als eine der Antworten. Längerer Code, aber gut geschrieben. – Elye

1

Sie können app:errorTextAppearance auf Layout oder textLayout.setErrorTextAppearance() verwenden, um den Stil des Fehlertextes zu ändern.

Wenn Sie dies auf einen Stil setzen, der dem Hilfstext entspricht, sieht es wie ein Hilfstext aus. Dann verwenden Sie "Fehler" Methoden, um Ihren Text zu zeigen

textLayout.setErrorTextAppearance(R.style.TextAppearance_HelperText); 
textLayout.setErrorEnabled(true) 
textLayout.setError(getString(errorText)); 
Verwandte Themen