Есть ли способ изменить цвет уже примененного BackgroundColorSpan в SpannableString? - PullRequest
0 голосов
/ 04 мая 2020

Что я на самом деле делаю, так это сохраняю SpannableString в форме HTML, но у него есть BackgroundColorSpan с каналом aplha в своем цвете. Теперь я узнал (через испытания), что мой канал цвета aplha удаляется (из-за невозможности 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 Ответ

0 голосов
/ 04 мая 2020

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

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...