提前感谢您的任何回复.
Thank you in advance for any responses.
我正在尝试在我的 Android 应用程序中添加一个 EditText,它对输入的不同字符具有不同的颜色.
I am trying to have an EditText in my Android application which has different colours for different characters which are typed in.
例如字母A"应始终为蓝色,字母b"应始终为绿色……以此类推.
For e.g. Alphabet "A" should always be blue, alphabet "b" should always be green... so on.
到目前为止,我还没有找到解决方案.请善待我,指引我正确的方向.
So far, I have no been able to find a solution for it. Please be kind enough to guide me in the right direction.
正如所指出的,您可以在输入文本时将 Spannables 应用于文本.像这样的:
As was pointed out, you can apply Spannables to the text as it is entered. Something like this:
colorEdit.addTextChangedListener(new TextWatcher() {
String lastText = null;
@Override
public void onTextChanged(CharSequence s, int start, int before,
int count) {
Log.d("", "lastText='" + lastText + "'");
Log.d("", "s='" + s + "'");
if (!s.toString().equals(lastText)) {
lastText = s.toString();
String res = "";
char[] split = s.toString().toCharArray();
for (char c : split) {
String color = null;
if (c == 'a') {
color = "red";
} else if (c == 'b') {
color = "green";
} else if (c == 'c') {
color = "blue";
}
// etc...
if (color != null) {
res += "<font color="" + color + "">" + c
+ "</font>";
} else {
res += c;
}
}
int selectStart = colorEdit.getSelectionStart();
int selectEnd = colorEdit.getSelectionEnd();
colorEdit.setText(Html.fromHtml(res));
colorEdit.setSelection(selectStart, selectEnd);
}
}
@Override
public void beforeTextChanged(CharSequence s, int start, int count, int after) {}
@Override
public void afterTextChanged(Editable s) {}
});
一些需要注意的事情,我调用 setText
这当然会导致 onTextChanged
再次运行,所以我检查文本是否实际更改.此外,光标位置未正确保存,因此我也将其存储并恢复.
some things to note, I call setText
which of course causes onTextChanged
to run again, so I check that the text actually changed. Also, the cursor position was not saved correctly so I store and restore that as well.
这篇关于Android:EditText中不同字符的不同颜色的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持跟版网!