Есть ли способ изменить цвет уже примененного BackgroundColorSpan в SpannableString?

На самом деле я храню SpannableString в виде HTML но у него есть BackgroundColorSpanкоторый имеет в своем цвете канал апла. Теперь я узнал (с помощью испытаний), что мой аплха-канал цвета уходит (из-за невозможностиHTML) из текста всякий раз, когда я пытаюсь его сохранить.

Теперь я хочу знать, есть ли способ извлечь все BackgroundColorSpan экземпляры в SpannableStringИ изменить их свойство цвета? ВсеBackgroundColorSpan экземпляры одного цвета. Я просто хочу добавить к их цвету альфа-канал (изменив их цвет), прежде чем я представлю текст пользователям.

Я нашел способ извлечь все 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);

1 ответ

Решение

Неважно, я получил ответ здесь

Все, что мне нужно было сделать, это удалить текущий диапазон и заменить его на 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);

Я просто не знал, смогу ли найти начало и конец отдельных пролетов.

Другие вопросы по тегам