2017-02-07 6 views
0

Давайте представим себе, что мне нужно создать регистратор на Android, который отображает все в TextView.Добавить HTML-содержимое в TextView

Поэтому я создаю многострочный TextView. Тогда первоначально есть метод для добавления простого текста в TextView:

TextView output; // Initialized in onCreate 
public static void log(final String text) { // Method is called always when Log.log is called 
    output.append(text + "\n"); 
} 

Это работает как шарм, но я хочу, чтобы добавить красный цвет текста (или фон текста), когда журнал возвращает некоторую ненужную информацию (например, HTTP 500) , Так я обновил метод и использовать некоторые HTML:

public static void log(final String text) { 
    String newText = output.getText().toString(); 
    if (text.contains("500")) { 
    newText += "<font color='#FF0000'><b>" + text + "</b></font><br />"; 
    } else { 
    newText += text + "<br />"; 
    } 
    output.setText(Html.fromHtml(newText), TextView.BufferType.SPANNABLE); 
} 

Но это всегда форматирует только текущий «текст» и все до этого (output.getText()) были не отформатирован. Похоже, TextView не сохраняет текст с тегами HTML и просто оформляется сразу.

Я пытался что-то вроде:

spannableString.setSpan(new BackgroundColorSpan(color), 0, 
        text.length(), Spannable.SPAN_EXCLUSIVE_EXCLUSIVE); 

output.setText(spannableString, TextView.BufferType.SPANNABLE); 

Что сделал цветной фон, но только текущего текста. Я хотел бы иметь выход, как белые линии, и когда около 500 затем показывают несколько красных линий (так что это динамический).

Любые идеи?

ответ

1

Итак, после некоторого более глубокого поиска я нашел SpannableStringBuilder и я изменил код:

public static void log(final String text) { 
    // Could be instantiate just once e.g. in onCreate and here just appending 
    SpannableStringBuilder ssb = new SpannableStringBuilder(output.getText()); 
    if (text.contains("500")) { 
    ssb.append(coloredText(text + "\n", Color.parseColor("red"))); 
    } else { 
    ssb.append(text).append("\n"); 
    } 
    output.setText(ssb, TextView.BufferType.SPANNABLE); 
} 


private static SpannableString coloredText(String text, int color) { 
    final SpannableString spannableString = new SpannableString(text); 
    try { 
    spannableString.setSpan(new BackgroundColorSpan(color), 0, 
        text.length(), Spannable.SPAN_EXCLUSIVE_EXCLUSIVE); 
    } catch (Exception e) {} 
    return spannableString; 
} 

И что сделал трюк

 Смежные вопросы

  • Нет связанных вопросов^_^