0

我实际上在做的是我SpannableString以 的形式存储 aHTML但它BackgroundColorSpan的颜色有一个 aplha 通道。现在我(通过试验)知道,HTML每当我尝试存储它时,我的颜色的 aplha 通道就会从文本中消失(由于无法)。

现在我想知道的是,有没有一种方法可以提取ANDBackgroundColorSpan中的所有实例并SpannableString更改它们的颜色属性?所有BackgroundColorSpan实例都具有相同的颜色,我只想在向用户呈现文本之前为它们的颜色添加一个 alpha 通道(通过更改它们的颜色)。

我想出了一种方法来提取所有BackgroundColorSpan实例,getSpans但我仍然找不到改变它们颜色的方法。

以下是相关代码:

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);
4

1 回答 1

0

没关系,我在这里得到了答案

我所要做的就是删除当前跨度并将其替换为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);

我只是不知道我是否能找到各个跨度的开始和结束。

于 2020-05-04T09:26:35.370 回答