我有代码来搜索TextView
并使用突出显示返回搜索到的字词。问题在于它也保持先前搜索的单词突出显示,而不是重新开始突出显示。以下是我的代码:
String ett = et.getText().toString();
String tvt = tvdisplay.getText().toString();
int ofe = tvt.indexOf(ett,0);
Spannable WordtoSpan = new SpannableString(tvdisplay.getText());
for (int ofs=0; ofs<tvt.length() && ofe != -1; ofs=ofe+1)
{
ofe = tvt.indexOf(ett, ofs);
if (ofe == -1)
break;
else
{
WordtoSpan.setSpan(new BackgroundColorSpan(0xFFFFFF00),ofe,ofe+ett.length(),Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
tvdisplay.setText(WordtoSpan, TextView.BufferType.SPANNABLE);
}
}
}
});
}
答案 0 :(得分:0)
而不是使用new SpannableString(tvdisplay.getText())
new SpannableString(tvt)
强>
您要做的是从文本 String 创建新的Spannable,而不是从 CharSequence 创建。但问题是tvdisplay.getText()
会返回CharSequence
- 在这种情况下,它会返回您之前设置的SpannableString
。
如果性能是您应用的关键点,您可以考虑使用removeSpan()
删除旧版本,而不是每次都创建一个新的SpannableString对象。有关字符串,CharSequences等的更多信息,请查看https://stackoverflow.com/a/17547344/1096567