有什么办法可以改变SpannableString中已经应用的BackgroundColorSpan的颜色吗?

问题描述 投票:0回答:1

我实际上要做的是,我在存储一个 SpannableString 形同 HTML 但它有 BackgroundColorSpan 它的颜色中有一个plha通道。现在我知道了(通过试验),我的颜色的apha通道消失了(由于无法使用的 HTML)从文本中提取出来,每当我试图存储它的时候。

现在我想知道的是,有没有一种方法可以提取所有的 BackgroundColorSpan 中的实例。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);
android background textview android-spannable
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);

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

© www.soinside.com 2019 - 2024. All rights reserved.