setHintTextColor()在EditText中


88

我有其中有两个文本框的“视图”,用户可以从同一屏幕上的另一个视图中选择文本颜色(通过对话框)。

因此,当用户通过对话框更改颜色时,我正在更改EditText文本及其提示的颜色。但是当EditText该用户选择其他颜色后,如果有一些文本可用,则该文本将以该颜色显示。但是,如果我删除所有这些文本,则HintText的颜色将为先前的颜色。

例如,当前如果我在文本框中有红色,并且用户选择绿色,则文本在那里是绿色。但是,如果我删除了该文本,则即使我在代码中更改了提示颜色,提示文本也会变成红色。仅当那里有一些文本时才会出现此问题。如果为空并且提示文本存在,则问题不会出现。


Answers:


56

使用此更改提示颜色。--

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
为什么如此复杂的解决方案可以在半行内完成,如下文anandc回答。
zeeshan

8
因为那个解决方案不能解决他的问题?
evaristokbza 2014年


22

默认颜色:

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

对于颜色代码:

android:textColorHint="#33b5e5"

不要亲自进行这些修改。编辑从根本上提高了答案的可读性和/或提高了答案的完整性。另外,如果适用,请在需要的地方添加有关代码的说明,例如OP所面临的问题或问题等:)
Sufian

15

内部布局Xml文件中,我们可以更改提示的颜色.....

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

您可以将*替换为颜色或颜色代码。


7

似乎EditText仅在文本为空时才应用hintTextColor。这样简单的解决方案就是这样

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

如果您有多个字段,则可以扩展EditText并编写一个执行此逻辑的方法,而改用该方法。


6

用Java编程-至少API v14 +

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


1
在我的三星S5 apiV19上遇到了同样的麻烦,就像@dishan提到的那样:setHintTextColor(color)如果有一些文本,即使是,也无法正常工作""
德米特里·格里亚津

2

这就像默认提示色,对我有用:

editText.setHintTextColor(Color.GRAY);


0

您可以editText.invalidate()在重置提示颜色后致电。那可以解决您的问题。实际上,SDK以相同的方式更新颜色。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.