Ich habe die Ansicht, in der zwei Textfelder vorhanden sind, und der Benutzer kann die Textfarbe aus einer anderen Ansicht auf demselben Bildschirm auswählen (durch ein Dialogfeld).
Wenn der Benutzer also die Farbe über ein Dialogfeld ändert, ändere ich die Farbe von EditText
und dessen Hinweis. Wenn jedoch in EditText
Text verfügbar ist, nachdem der Benutzer eine andere Farbe ausgewählt hat, kommt dieser Text in dieser Farbe. Wenn ich jedoch den gesamten Text entferne, ist die Farbe von HintText die der vorherigen Farbe.
Wenn ich beispielsweise eine rote Farbe in einem Textfeld habe und der Benutzer die grüne Farbe auswählt, wird der Text in grün angezeigt. Wenn ich diesen Text jedoch entferne, wird der Hinweistext rot angezeigt, auch wenn ich die Farbe des Hinweises ändern im Code. Dieses Problem tritt nur auf, wenn Text vorhanden ist. Wenn es leer ist und ein Hinweistext vorhanden ist, kommt das Problem nicht.
Verwenden Sie diese Option, um die Hinweisfarbe zu ändern. -
editText.setHintTextColor(getResources().getColor(R.color.white));
Lösung für Ihr Problem -
editText.addTextChangedListener(new TextWatcher() {
@Override
public void onTextChanged(CharSequence arg0, int arg1, int arg2,int arg3){
//do something
}
@Override
public void beforeTextChanged(CharSequence arg0, int arg1, int arg2, int arg3) {
//do something
}
@Override
public void afterTextChanged(Editable arg0) {
if(arg0.toString().length() <= 0) //check if length is equal to zero
tv.setHintTextColor(getResources().getColor(R.color.white));
}
});
Fügen Sie dies einfach in Ihre layout
für die EditText
ein:
Android: textColorHint = "# FFFFFF"
Standardfarben:
Android:textColorHint="@Android:color/holo_blue_dark"
Für Farbcode:
Android:textColorHint="#33b5e5"
In der Layout-XML-Datei können wir die Farbe des Hinweises ändern .....
Android:textColorHint="@Android:color/*****"
sie können * durch Farbe oder Farbcode ersetzen.
Scheint, dass EditText die HinweisTextColor nur dann anwendet, wenn der Text leer ist. So einfache Lösung wird so sein
Editable text = mEditText.getText();
mEditText.setText(null);
mEditText.setHintTextColor(color);
mEditText.setText(text);
Wenn Sie über mehrere Felder verfügen, können Sie den EditText erweitern und eine Methode schreiben, die diese Logik ausführt, und stattdessen diese Methode verwenden.
Programmatisch in Java - Mindestens API v14 +
exampleEditText.setHintTextColor(getResources().getColor(R.color.your_color));
Dies ist wie die Standard-Hinweisfarbe, die für mich funktioniert hat:
editText.setHintTextColor(Color.GRAY);
Sie können editText.invalidate()
aufrufen, nachdem Sie die Hinweisfarbe zurückgesetzt haben. Das könnte Ihr Problem lösen. Eigentlich aktualisiert das SDK die Farbe auf dieselbe Weise.