我正在尝试创建一个EditText
,其中包含两个不同颜色的文本块:
String strText = txtEditText.getText().toString();
String strFrontPart = strText.substring(0, FRONT_PART_COUNT);
String strBackPart = strText.substring(FRONT_PART_COUNT);
String text = "<font color=#ffffff>" + strFrontPart + "</font>";
text += "<font color=#000000>" + strBackPart + "</font>";
txtEditText.setText(Html.fromHtml(text));
上面的代码成功地将前面的FRONT_PART_COUNT
字符转换为白色字符,其余字符转换为黑色。
我的问题是 如何在编辑EditText时实现这一目标?
我显然无法将其放在afterTextChanged()
中,因为它会导致无限递归调用。
答案 0 :(得分:1)
您可以使用setSpan
处理程序中Editable
param的afterTextChanged
方法执行此操作。
样品:
EditText editText
editText.addTextChangedListener(new TextWatcher() {
final ForegroundColorSpan red = new ForegroundColorSpan(Color.rgb(255, 0, 0));
@Override public void beforeTextChanged(CharSequence s, int start, int count, int after) {
}
@Override public void onTextChanged(CharSequence s, int start, int before, int count) {
}
@Override public void afterTextChanged(Editable s) {
int max = 2;
if(s.length() < max) max = s.length();
s.setSpan(red, 0, max, Spannable.SPAN_INCLUSIVE_INCLUSIVE);
}
});
前两个字母为红色。
答案 1 :(得分:1)
mBugDescription = (EditText) findViewById(R.id.bug_description);
mWhiteSpan = new ForegroundColorSpan(0xFFFFFFFF);
mBlackSpan = new ForegroundColorSpan(0xFF000000);
mBugDescription.addTextChangedListener(new TextWatcher() {
@Override
public void beforeTextChanged(CharSequence s, int start, int count, int after) {
}
@Override
public void onTextChanged(CharSequence s, int start, int before, int count) {
}
@Override
public void afterTextChanged(Editable s) {
if(s.length() > 0) {
int FRONT_PART_COUNT = 10;
s.setSpan(mWhiteSpan, 0, Math.min(s.length(), FRONT_PART_COUNT), Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
if(s.length() > FRONT_PART_COUNT){
s.setSpan(mBlackSpan, FRONT_PART_COUNT + 1, s.length(), Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
}
}
}
});
答案 2 :(得分:-1)
在这种情况下,使用TextWatcher
是最好的主意(具体来说,afterTextChanged(Editable s)
方法),因为它可以在EditText
中编辑后对文本执行修改。
然后您可以通过将其作为txtEditText.addTextChangedListener(TextWatcher t)
中的参数传递来添加它。
有关TextWatcher
的更多信息:
http://developer.android.com/reference/android/text/TextWatcher.html