我正在选择TextView的一部分,并单击“突出显示”按钮,然后将选择的开始和结束索引发送到数据库.然后,我从db加载所有开始索引和结束索引,并更改它们之间的文本颜色.
问题是一两次后,应用程序正在更改未处于选中状态的文本的颜色.并且所选部分保持不变.
我的密码:
>当用户选择并按下突出显示按钮时
int i=contentText.getSelectionStart();
int j=contentText.getSelectionEnd();
db.insertHiglightIndex(String.valueOf(i),String.valueOf(j));
setHighlightedText();
> setHighlightedText()方法.
String fullText=contentText.getText().toString();
for(int i=0; i<db.getAllStartIndex().size();i++){
String a=fullText.substring(Integer.parseInt(db.getAllStartIndex().get(i)),Integer.parseInt(db.getAllEndIndex().get(i)));
fullText = fullText.replace(a, "<font color='red'>"+a+"</font>");
}
contentText.setText(Html.fromHtml(fullText), TextView.BufferType.SPANNABLE);
我的画面.
选择:
结果:
显然,所选区域是从“加里克”到“巴特”,结果是从“实体”到“ 2012”
我不明白为什么会这样.我认为此< font color ='red'>“和”< / font>线.
谢谢
解决方法:
索引错误,因为已经添加了< font color ='red'>首先,以至于第二次将此标记也计为字符串的一部分,因此,我建议创建一个新的临时String,将相同的文本分配给String,但在替换之前保留的字体标签之后.使用此语法从originalString中删除以前的字体标签
String tempString = originalString.replaceAll("[<](/)?font[^>]*[>]", "");
之后,仅使用tempString.这意味着再次将您必须拥有的每个先前的字体标签添加到tempString并设置该文本.
在下一次再次执行相同操作时,首先删除所有字体标签,然后再次将所有字体标签添加回tempString以及使用当前使用的同一循环的当前选择中.