setHintTextColor () в EditText

88

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

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

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

Картик Триведи
источник
1
Проверьте это stackoverflow.com/questions/25134463/…
Набин

Ответы:

57

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

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));
    }
});
Сунил Кумар Саху
источник
7
Почему такое сложное решение, которое можно выполнить за полстроки, как ответил ниже.
zeeshan
8
потому что это решение не решает его проблемы?
evaristokbza 05
319

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

android: textColorHint = "# FFFFFF"

Ананд Чаван
источник
9
Как это должно решить вопрос OP? вопрос в том, как ДИНАМИЧЕСКИ изменить цвет подсказки, когда в EditText есть текст, и я не понимаю, как это решить ...
evaristokbza 05
5
Пожалуйста, внимательно прочтите вопрос. автор не спрашивал должным образом.
Ананд Чаван
22

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

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

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

android:textColorHint="#33b5e5"
Киран Кумар
источник
не принимайте эти правки на свой счет. Редактирование в основном улучшает читаемость ответа и / или улучшает его полноту. Также, если применимо, добавьте пояснения о коде, где это необходимо, например, что он делает или с какой проблемой столкнулся OP и т. Д. :)
Суфиан
15

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

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

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

Ахил с
источник
7

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

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

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

Dishan
источник
6

Программно на Java - как минимум API v14 +

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

Майкл
источник
1
на моем samsung S5 apiV19 та же проблема, что и @dishan: setHintTextColor(color)не работает, если есть какой-то текст, ДАЖЕ, если он "".
Дмитрий Грязин
2

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

editText.setHintTextColor(Color.GRAY);

Каран
источник
0

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

освежитель
источник