Android 如何实现只有特定部分是彩色的SpannableStringBuilder?
我需要实现一个字符串,改变它的某些部分的颜色以突出显示它。我需要创建一个类似于热键指南的东西,它显示通过按突出显示的数字可以执行的操作。我曾经使用Html。从HTML,但我读到,它的速度不快,因为解析。我需要在慢速设备上运行代码。这是我当前的代码Android 如何实现只有特定部分是彩色的SpannableStringBuilder?,android,emoji,spannablestringbuilder,Android,Emoji,Spannablestringbuilder,我需要实现一个字符串,改变它的某些部分的颜色以突出显示它。我需要创建一个类似于热键指南的东西,它显示通过按突出显示的数字可以执行的操作。我曾经使用Html。从HTML,但我读到,它的速度不快,因为解析。我需要在慢速设备上运行代码。这是我当前的代码 private SpannableStringBuilder spannedTxt(String txt, int count){ String tagStart = "<p>", tagEnd = "</p>"
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;
}
private SpannableStringBuilder spandtxt(字符串txt,整数计数){
字符串tagStart=“”,tagEnd=“”;
字符串temp=txt;
int emojCount=计数/2;
emojCount+=1;
SpannableStringBuilder ssb=新的SpannableStringBuilder();
for(int i=0;i
它当前所做的是更改
和
中第一个子字符串的样式,这是一个数字。由于某些原因,标记开始和标记结束并没有从最终的SpannableStringBuilder中删除,即使在我记录时,它显示标记已删除我使用
和
来知道哪一部分是需要着色的部分。我需要它,因为动作中也可以包含数字,我不需要在动作中回忆这些数字。例如,操作1(按1)。该字符串还包含每个操作之间的表情符号,我使用这些符号的计数来知道该字符串包含多少个操作
更简单的解释:下面是我需要做的 操作1(按
1
)操作2(按2
)以
操作1(按1)操作2(按2)
您可以使用Html.fromHtml()静态函数将Html代码解析为具有属性的文本视图文本(如Html的属性),如下所示:
因此,经过思考,我找到了解决问题的方法。我改变了一点为SpannableStringBuilder创建字符串的方式
Action 1 (Press <p>[1]<p>) �� �� Action 2 (Press <p>[2]<p>) �� �� Action 3 (Press <p>[3]<p>)
操作1(按[1])�� �� 动作2(按[2])�� �� 动作3(按[3])
使用上面的字符串,我将代码修改为下面的代码
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;
}
private SpannableStringBuilder spandtxt(字符串txt){
字符串tagStart=“”;
字符串temp=txt;
字符串[]actTxtArr=txt.split(tagStart);
SpannableStringBuilder ssb=新的SpannableStringBuilder();
for(int i=0;i
现在,它按照我希望的方式工作。我希望可能需要实现类似我所做的事情的人会觉得这很有用。你能举一个预期的例子吗。你想要什么作为一个例子。你是指我的预期输出吗?实际上我根本无法理解你的问题。请详细说明一次。我已经添加了一个简短的解释,以便你能够理解nt要使用spannable更改文本的颜色,请使用span启用?正如我在问题上所说,我想使用span nablestringbuilder,因为Html.fromHtml非常慢,因为它需要解析才能从我以前读过的答案工作,我需要在慢速设备上运行它。