我需要实现一个字符串,该字符串可以更改其某些部分的颜色以使其突出显示。我需要创建类似热键指南的内容,以按突出显示的数字来显示您可以执行的操作。我曾经用过HTML。从HTML,但是我已经读到它由于解析而并不快。我需要在速度较慢的设备上运行代码。这是我当前的代码。
private SpannableStringBuilder spannedTxt(String txt, int count){
String tagStart = "<p>", tagEnd = "</p>";
String temp = txt;
int emojCount = count /2;
emojCount += 1;
SpannableStringBuilder ssb = new SpannableStringBuilder();
for (int i = 0; i < count; i++) {
SpannableString spannable = new SpannableString(temp);
Log.d(TAG, "convertToSpan: "+spannable.toString());
spannable.setSpan(new ForegroundColorSpan(Color.RED),
txt.indexOf(tagStart) + tagStart.length(), txt.indexOf(tagEnd),
Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
ssb.append(spannable);
temp = temp.replaceFirst(tagStart, "");
temp = temp.replaceFirst(tagEnd, "");
}
return ssb;
}
当前执行的操作是更改<p>
和</p>
(是一个数字)中第一个子字符串的样式。出于某种原因,即使我登录时表明已删除标签,也不会从最终SpannableStringBuilder中删除tagStart和tagEnd。
我使用了<p>
和</p>
来知道哪一部分需要着色。我需要这样做,因为操作也可以包含数字,并且不需要在操作上为这些数字重新着色。例如,操作1(按1)。该字符串还包含每个动作之间的表情符号,我使用这些表情符号的数量来了解该字符串包含多少个动作。
简单说明:
我需要做的是下面的
动作1(按<p>
1 </p>
)动作2(按<p>
2 </p>
)进行
Action 1 (Press <font color="red">1</font>) Action 2 (Press <font color="red">2</font>)
使用SpannableStringBuilder之类的东西
答案 0 :(得分:0)
您可以使用Html.fromHtml()静态函数将HTML代码解析为具有属性(如HTML的属性)的TextView文本,如下所示:
答案 1 :(得分:0)
因此,经过一番思考,我找到了解决问题的方法。我更改了为SpannableStringBuilder创建字符串的方式。
Action 1 (Press <p>[1]<p>) �� �� Action 2 (Press <p>[2]<p>) �� �� Action 3 (Press <p>[3]<p>)
使用上面的字符串,我已经将代码修改为下面的代码。
private SpannableStringBuilder spannedTxt(String txt){
String tagStart = "<p>";
String temp = txt;
String[] actTxtArr = txt.split(tagStart);
SpannableStringBuilder ssb = new SpannableStringBuilder();
for (int i = 0; i < actTxtArr.length; i++) {
String arrTxt = actTxtArr[i];
SpannableString spannable;
if(arrTxt.contains("[")){
arrTxt = arrTxt.replace("[", "");
arrTxt = arrTxt.replace("]", "");
spannable = new SpannableString(arrTxt);
spannable.setSpan(new ForegroundColorSpan(Color.RED),
arrTxt.indexOf(arrTxt), arrTxt.indexOf(arrTxt) + arrTxt.length(),
Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
}else{
spannable = new SpannableString(arrTxt);
}
ssb.append(spannable);
}
return ssb;
}
现在它按照我想要的方式工作。我希望有人可能需要实施像我确实发现的那样的东西。