我实际要做的是以HTML
的形式存储SpannableString
,但它有一个BackgroundColorSpan
,它的颜色有一个aplha通道。现在我知道(通过试验(,每当我试图存储文本时,我的aplha颜色通道都会从文本中消失(由于HTML
无法使用(。
现在我想知道的是,有没有一种方法可以提取SpannableString
中的所有BackgroundColorSpan
实例并更改它们的颜色属性?所有的BackgroundColorSpan
实例都是相同的颜色。我只想在向用户显示文本之前,为它们的颜色添加一个alpha通道(通过更改它们的颜色(。
我找到了一种使用getSpans
提取所有BackgroundColorSpan
实例的方法,但我仍然找不到更改它们颜色的方法。
这是相关代码:
SpannableString spannableDescString = new SpannableString(trimTrailingWhitespace(Html.fromHtml(note.getDesc())));
BackgroundColorSpan[] highlightSpanArray = spannableDescString.getSpans(0,spannableDescString.length(),BackgroundColorSpan.class);
if(highlightSpanArray.length!=0){
for(BackgroundColorSpan item : highlightSpanArray){
//what should I put here to change every item's color
}
}
desc.setText(spannableDescString);
无论如何,我在这里得到了答案
我所要做的就是删除当前跨度,并将其替换为所需颜色的BackgroundColorSpan
。这是代码片段。
SpannableString spannableDescString = new SpannableString(trimTrailingWhitespace(Html.fromHtml(note.getDesc())));
BackgroundColorSpan[] highlightSpanArray = spannableDescString.getSpans(0,spannableDescString.length(),BackgroundColorSpan.class);
if(highlightSpanArray.length!=0){
for(BackgroundColorSpan item : highlightSpanArray){
//what should i put here to change every items color
// get the span range
int start = spannableDescString.getSpanStart(item);
int end = spannableDescString.getSpanEnd(item);
// remove the undesired span
spannableDescString.removeSpan(item);
// set the new span with desired color
spannableDescString.setSpan(new BackgroundColorSpan(Color.RED),start,end, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
}
}
desc.setText(spannableDescString);
我只是不知道我是否能找到个人跨度的开始和结束。