setHintTextColor () dans EditText

88

J'ai une vue dans laquelle il y a deux zones de texte et l'utilisateur peut sélectionner la couleur du texte à partir d'une autre vue sur le même écran (via la boîte de dialogue).

Ainsi, lorsque l'utilisateur change de couleur via la boîte de dialogue, je change la couleur du EditTexttexte et son indice. Mais lorsqu'il y a du texte disponible EditTextaprès que l'utilisateur sélectionne une autre couleur, alors ce texte arrive dans cette couleur. Mais si je supprime tout ce texte, la couleur de HintText est celle de la couleur précédente.

Par exemple, actuellement, si j'ai une couleur rouge dans la zone de texte et que l'utilisateur sélectionne la couleur verte, le texte est là en couleur verte. Mais si je supprime ce texte, le texte de l'indice apparaît en rouge même si je change la couleur de l'indice dans le code. Ce problème survient uniquement lorsqu'il y a du texte. s'il est vide et qu'il y a du texte d'indication, le problème ne vient pas.

kartik trivedi
la source

Réponses:

56

Utilisez ceci pour changer la couleur de l'indice. -

editText.setHintTextColor(getResources().getColor(R.color.white));

Solution à votre problème -

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));
    }
});
Sunil Kumar Sahoo
la source
7
Pourquoi une solution aussi compliquée qui peut être réalisée en une demi-ligne, comme anandc a répondu ci-dessous.
zeeshan
8
parce que cette solution ne résout pas son problème?
evaristokbza
318

Ajoutez simplement ceci dans votre layoutpour le EditText:

android: textColorHint = "# FFFFFF"

Anand Chavan
la source
9
Comment est-ce censé résoudre la question d'OP? la question est de savoir comment changer la couleur de l'indice DYNAMIQUEMENT lorsque le EditText contient du texte et que je ne vois pas comment cela le résoudra ...
evaristokbza
5
Veuillez lire attentivement la question. l'auteur n'a pas demandé de manière appropriée.
Anand Chavan
22

Couleurs par défaut:

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

Pour le code couleur:

android:textColorHint="#33b5e5"
Kiran Kumar
la source
ne prenez pas ces modifications personnellement. L'édition améliore fondamentalement la lisibilité de la réponse et / ou en améliore l'exhaustivité. Aussi, le cas échéant, ajoutez des explications sur le code si nécessaire, telles que ce qui est fait ou le problème auquel le PO était confronté, etc. :)
Sufian
15

Fichier Xml de mise en page interne, nous pouvons changer la couleur de l'indice .....

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

vous pouvez remplacer * par couleur ou code couleur.

Akhil s
la source
7

Il semble que EditText applique le hintTextColor uniquement si le texte est vide. La solution si simple sera comme ça

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

Si vous avez plusieurs champs, vous pouvez étendre le EditText et écrire une méthode qui exécute cette logique et utiliser cette méthode à la place.

dishan
la source
6

Programmation en Java - Au moins API v14 +

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

Michael
la source
1
sur mon samsung S5 apiV19 le même problème, comme @dishan l'a mentionné: setHintTextColor(color)ne fonctionne pas au cas où il y aurait du texte, MÊME si c'est "".
Dmitry Gryazin
2

C'est comme la couleur d'indication par défaut, a fonctionné pour moi:

editText.setHintTextColor(Color.GRAY);

Karan
la source
0

Vous pouvez appeler editText.invalidate()après avoir réinitialisé la couleur de l'indice. Cela pourrait résoudre votre problème. En fait, le SDK met à jour la couleur de la même manière.

Freshomer
la source