setHintTextColor () in EditText


88

Ich habe eine Ansicht, in der sich zwei Textfelder befinden, und der Benutzer kann die Textfarbe aus einer anderen Ansicht auf demselben Bildschirm auswählen (über das Dialogfeld).

Wenn der Benutzer die Farbe über das Dialogfeld ändert, ändere ich die Farbe des EditTextTexts und seinen Hinweis. Wenn jedoch Text verfügbar ist, EditTextnachdem der Benutzer eine andere Farbe ausgewählt hat, wird dieser Text in dieser Farbe angezeigt. Wenn ich jedoch den gesamten Text entferne, entspricht die Farbe von HintText der vorherigen Farbe.

Zum Beispiel, wenn ich derzeit eine rote Farbe im Textfeld habe und der Benutzer die grüne Farbe auswählt, damit der Text in grüner Farbe vorhanden ist. Wenn ich diesen Text entferne, wird der Hinweistext rot angezeigt, auch wenn ich die Hinweisfarbe im Code ändere . Dieses Problem tritt nur auf, wenn dort Text vorhanden ist. Wenn es leer ist und Hinweistext vorhanden ist, tritt kein Problem auf.


1
Überprüfen Sie dies aus stackoverflow.com/questions/25134463/…
Nabin

Antworten:


56

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));
    }
});

7
Warum so eine komplizierte Lösung, die in einer halben Zeile erreicht werden kann, wie anandc unten antwortete.
Zeeshan

8
weil diese Lösung sein Problem nicht löst?
Evaristokbza

318

Fügen Sie dies einfach in Ihre layoutfür die EditText:

android: textColorHint = "# FFFFFF"


9
Wie soll dies die Frage von OP lösen? Die Frage ist, wie man die Hinweisfarbe DYNAMISCH ändert, wenn der EditText Text enthält und ich nicht sehe, wie dies das
Problem

5
Bitte lesen Sie die Frage sorgfältig durch. Der Autor hat nicht in angemessener Weise gefragt.
Anand Chavan

22

Standardfarben:

android:textColorHint="@android:color/holo_blue_dark"

Für Farbcode:

android:textColorHint="#33b5e5"

Nehmen Sie diese Änderungen nicht persönlich. Das Bearbeiten verbessert grundsätzlich die Lesbarkeit der Antwort und / oder die Vollständigkeit. Falls zutreffend, fügen Sie bei Bedarf auch Erklärungen zum Code hinzu, z. B. was funktioniert oder mit welchem ​​Problem das OP konfrontiert war usw. :)
Sufian

15

Inside Layout Xml-Datei Wir können die Farbe des Hinweises ändern .....

android:textColorHint="@android:color/*****"

Sie können * durch Farbe oder Farbcode ersetzen .


7

Scheint, dass EditText den HinweisTextColor nur anwendet, wenn der Text leer ist. So einfach wird die Lösung sein

Editable text = mEditText.getText();
mEditText.setText(null);
mEditText.setHintTextColor(color);
mEditText.setText(text);

Wenn Sie mehrere Felder haben, können Sie den EditText erweitern und eine Methode schreiben, die diese Logik ausführt, und stattdessen diese Methode verwenden.


6

Programmatisch in Java - Mindestens API v14 +

exampleEditText.setHintTextColor(getResources().getColor(R.color.your_color));


1
auf meinem samsung s5 apiV19 das gleiche problem, wie @dishan erwähnt hat: setHintTextColor(color)funktioniert nicht, wenn es einen text gibt, AUCH wenn es ist "".
Dmitry Gryazin

2

Dies ist wie die Standard-Hinweisfarbe, die für mich funktioniert hat:

editText.setHintTextColor(Color.GRAY);


0

Sie können anrufen, editText.invalidate()nachdem Sie die Hinweisfarbe zurückgesetzt haben. Das könnte Ihr Problem lösen. Tatsächlich aktualisiert das SDK die Farbe auf die gleiche Weise.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.