2つのテキストボックスがあるビューがあり、ユーザーは(ダイアログボックスを介して)同じ画面上の別のビューからテキストの色を選択できます。
そのため、ユーザーがダイアログボックスで色を変更すると、EditText
テキストの色とそのヒントが変更されます。しかし、ユーザーが他の色を選択した後、EditText
で利用可能なテキストがある場合、そのテキストはその色で表示されます。しかし、すべてのテキストを削除すると、HintTextの色は前の色になります。
たとえば、現在テキストボックスに赤い色があり、ユーザーが緑色を選択すると、テキストは緑色になります。しかし、そのテキストを削除すると、コードでヒントの色を変更であっても、ヒントテキストが赤くなります。この問題は、テキストが存在する場合にのみ発生します。空白でヒントテキストがある場合、問題は発生していません。
これを使用して、ヒントの色を変更します。 -
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
に追加するだけです:
Android: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は同じ方法で色を更新します。