Есть ли способ изменить цвет уже примененного 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);
Я просто не знал, смогу ли найти начало и конец отдельных пролетов.