setHintTextColor() в EditText

У меня есть вид, в котором есть два текстовых поля, и пользователь может выбрать цвет текста из другого вида на том же экране (через диалоговое окно).

Поэтому, когда пользователь меняет цвет через диалоговое окно, я меняю цвет EditText текст и его подсказка. Но когда есть какой-то текст доступен в EditText после того, как этот пользователь выберет другой цвет, этот текст придет в этом цвете. Но если я удаляю весь этот текст, то цвет HintText - это цвет предыдущего цвета.

Например, в настоящее время, если у меня есть красный цвет в текстовом поле, и пользователь выбирает зеленый цвет, чтобы текст был в зеленом цвете. Но если я удаляю этот текст, текст подсказки становится красным, даже если я изменяю цвет подсказки в коде. Эта проблема возникает только тогда, когда там есть текст. если он пуст и текст подсказки есть, то проблема не наступит.

8 ответов

Решение

Используйте это, чтобы изменить цвет подсказки. -

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

Решение вашей проблемы -

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

Просто добавьте это в свой layout для EditText:

андроид:textColorHint="#FFFFFF"

Цвета по умолчанию:

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

Для цветового кода:

android:textColorHint="#33b5e5"

Внутри XML-файла макета мы можем изменить цвет подсказки.....

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

Вы можете заменить * на цвет или код цвета.

Кажется, что EditText применяет hintTextColor, только если текст пуст. Так простое решение будет так

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

Если у вас есть несколько полей, вы можете расширить EditText и написать метод, который выполняет эту логику, и использовать этот метод вместо этого.

Программно на Java - по крайней мере API v14+

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

Это похоже на цвет подсказки по умолчанию, работает для меня:

editText.setHintTextColor(Color.GRAY);

Вы могли бы позвонить editText.invalidate() после сброса цвета подсказки. Это может решить вашу проблему. На самом деле SDK обновляет цвет таким же образом.

Другие вопросы по тегам