提前感谢您的回复。
我想在我的Android应用程序中创建一个EditText,它为输入的不同字符设置了不同的颜色。
例如字母“A”应始终为蓝色,字母“b”应始终为绿色......依此类推。
到目前为止,我无法找到解决方案。 请善意引导我朝着正确的方向前进。
答案 0 :(得分:7)
正如所指出的,您可以在输入时将Spannables应用于文本。像这样:
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
再次运行,所以我检查文本是否实际发生了变化。此外,光标位置未正确保存,因此我也存储并恢复它。
答案 1 :(得分:2)
您可能希望将每个字母包装在自己的ForegroundColorSpan中。添加TextWatcher并在编辑文本时应用Spannables。
答案 2 :(得分:0)
你最好的镜头可能会覆盖EditText
并编写你自己的draw()
。但这种方式是疯狂的,因为通常是覆盖内置的视图类。
答案 3 :(得分:0)
如果我是你,我最好使用InputFilter
。 setText()
中的textWatcher{} onTextChange()
有一些问题(例如,在软键盘上,您无法选择国家级信件)。