Android Textview中的HTML样式错误

我正在选择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以及使用当前使用的同一循环的当前选择中.

上一篇:java-如何SetText一些重复的字符串,例如Animation-List?


下一篇:如何在Android中制作自定义TextView?