TextInputLayout: Unterschiedliche Farbe für Hinweis-Label, wenn nicht fokussiert

9

Was ich tun möchte:

Wenn ich einen EditText verwende, der in ein TextInputLayout eingebettet ist, möchte ich ...

  1. Setzen Sie die Farbe des Labels auf GRÜN, wenn es defokussiert ist und über dem EditText schwebt, da der Benutzer bereits einen Wert eingegeben hat
  2. Setzen Sie die Farbe der Beschriftung auf ROT, wenn sie defokussiert ist und sich im EditText befindet, da der Benutzer noch keinen Wert
  3. eingegeben hat
  4. Ich möchte nicht die Hinweistextfarbe aller meiner EditTexte in ROT ändern, sondern nur wenn sie in ein TextInputLayout eingebunden sind (ich brauche keinen allgemeinen Ansatz - einen bestimmten Ansatz wie das Festlegen eines Themas / Styles für jedes TextInputLayout im Layout XML wäre in Ordnung)
  5. Die Akzentfarbe (GELB), die verwendet wird, um das Floating-Label zu färben, wenn der Benutzer das Feld fokussiert hat, wird beibehalten (d. h. nicht geändert).

Was ich versucht habe:

Wenn Sie das folgende Thema als Thema / Stil in TextInputLayout festlegen, erfüllt dies 1. aber nicht 2.

%Vor%

Festlegen einer bestimmten Farbe für meinen eingebetteten EditText, der den Hinweistext in eine andere Farbe ändert:

%Vor%

verursacht tatsächlich eine Überlappung von Hinweistexten, wenn das Etikett von seiner schwebenden Position zurück in den Editiertext als ein Hinweis (d. h. kein Text) bewegt wird.

Einstellung:

%Vor%

im TextInputLayout:

%Vor%

Ändert die Farbe der Hinweismarke, aber auch für den fokussierten Zustand - was bedeutet, dass 4 nicht erfüllt ist.

Und da ein Bild mehr sagt als ein Tousand-Wort (alle Felder sind nicht fokussiert):

Wie erreicht man ein Setup, das die Kriterien 1-4 erfüllt?

    
AgentKnopf 12.07.2016, 11:20
quelle

1 Antwort

4

Ich hatte ein ähnliches Problem: Ich musste ein Texteingabelayout implementieren, in dem das Etikett verschiedene Farben für leer hat (wenn im Bearbeitungstext kein Text eingegeben wurde), "gefüllt" und fokussiert. Mein Hauptproblem bestand darin, zwischen dem leeren und dem gefüllten Zustand zu unterscheiden, da das Setzen einer anderen Farbe für den fokussierten Zustand bereits leicht mit Selektoren möglich war. Am Ende entschied ich mich, einen benutzerdefinierten "leeren Text" -Zustand zu definieren und mein benutzerdefiniertes Texteingabe-Layout zu implementieren (welches das normale Texteingabe-Layout erweitert).

Hier ist ein Code:

In res / Werte / attrs.xml:

%Vor%

Das benutzerdefinierte Texteingabe-Layout:

%Vor%

XML-Selektor zum Festlegen der Farbe der Beschriftung in verschiedenen Zuständen (res / color / input_field_floating_label.xml):

%Vor%

Stil für das Eingabetextlayout (in res / values ​​/ styles.xml):

%Vor%

Thema und Stil für den Bearbeitungstext (immer noch in res / values ​​/ styles.xml):

%Vor%

Verwendung:

%Vor%

Ich empfehle diesen Blogbeitrag, um eine Vorstellung von der Arbeit mit benutzerdefinierten Zuständen zu bekommen: Ссылка

    
hildegard 25.10.2016, 12:20
quelle