有什么方法可以更改 SpannableString 中已应用的 BackgroundColorSpan 的颜色?
Is there any way to change the color of an already applied BackgroundColorSpan in a SpannableString?
我实际上在做的是我以 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);
我只是不知道我是否可以找到各个跨度的开始和结束。
我实际上在做的是我以 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);
我只是不知道我是否可以找到各个跨度的开始和结束。