setHintTextColor () en EditText

88

Tengo una Vista en la que hay dos cuadros de texto y el usuario puede seleccionar el color del texto desde otra vista en la misma pantalla (a través del cuadro de diálogo).

Entonces, cuando el usuario cambia de color a través del cuadro de diálogo, estoy cambiando el color del EditTexttexto y su pista. Pero cuando hay algún texto disponible EditTextdespués de que el usuario selecciona otro color, entonces ese texto viene en ese color. Pero si elimino todo ese texto, el color de HintText es el del color anterior.

Por ejemplo, actualmente, si tengo color rojo en el cuadro de texto y el usuario selecciona el color verde, el texto aparece en color verde. Pero si elimino ese texto, el texto de la sugerencia aparecerá en rojo incluso si cambio el color de la sugerencia en el código. Este problema solo surge cuando hay algún texto allí. si está en blanco y hay texto de sugerencia, entonces el problema no vendrá.

kartik trivedi
fuente
1
Echa un vistazo a stackoverflow.com/questions/25134463/…
Nabin

Respuestas:

56

Use esto para cambiar el color de la pista. -

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

Solución para su problema -

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
fuente
7
Por qué una solución tan complicada que se puede lograr en media línea, como anandc respondió a continuación.
zeeshan
8
porque esa solución no está resolviendo su problema?
evaristokbza
318

Simplemente agregue esto en su layoutpara EditText:

android: textColorHint = "# FFFFFF"

Anand Chavan
fuente
9
¿Cómo se supone que esto resuelva la pregunta de OP? la pregunta es sobre cómo cambiar el color de la pista DINÁMICAMENTE cuando EditText tiene algo de texto y no veo cómo esto lo resolverá ...
evaristokbza
5
Lea atentamente la pregunta. el autor no ha preguntado de manera apropiada.
Anand Chavan
22

Colores predeterminados:

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

Para código de color:

android:textColorHint="#33b5e5"
kiran kumar
fuente
no tome estas ediciones personalmente. La edición básicamente mejora la legibilidad de la respuesta y / o mejora la integridad de la misma. Además, si corresponde, agregue una explicación sobre el código cuando sea necesario, como lo que hace o el problema que enfrenta el OP, etc. :)
Sufian
15

Dentro del archivo XML de diseño podemos cambiar el color de la pista .....

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

puede reemplazar * con color o código de color.

Akhil s
fuente
7

Parece que EditText aplica hintTextColor solo si el texto está vacío. Tan simple solución será así

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

Si tiene varios campos, puede extender EditText y escribir un método que ejecute esta lógica y usar ese método en su lugar.

dishan
fuente
6

Programáticamente en Java: al menos API v14 +

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

Miguel
fuente
1
en mi samsung S5 apiV19 el mismo problema, como mencionó @dishan: setHintTextColor(color)no funciona en caso de que haya algún texto, INCLUSO si es "".
Dmitry Gryazin
2

Este es como el color de sugerencia predeterminado, funcionó para mí:

editText.setHintTextColor(Color.GRAY);

karan
fuente
0

Puede llamar editText.invalidate()después de restablecer el color de la pista. Eso podría resolver su problema. En realidad, el SDK actualiza el color de la misma forma.

freshomer
fuente