2014-01-04 2 views
3

Я пытаюсь установить фон в TextView с помощью Html.fromHtml(). В частности, я хочу задать фон для первого слова.Html.fromHtml() не работает с цветом фона текста

Я использовал следующий код:

Html.fromHtml("<font color='red'>("+someText+")</font>"); 

и успешно выполняет с цветом текста. Однако я хочу изменить цвет фона.

Как я могу это сделать?

ответ

7

Попробуйте это:

TextView TV = (TextView) findViewById(R.id.mytextview01); 

Spannable wordtoSpan = new SpannableString("hello hi. how are you?");   

wordtoSpan.setSpan(new ForegroundColorSpan(Color.BLUE), 0, 5, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE); 
wordtoSpan.setSpan(new BackgroundColorSpan(Color.RED), 0, 5, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE); 

TV.setText(wordtoSpan); 

Это установить как текст, так и цвет фона (последний с BackgroundColorSpan).

+0

Сво Не работают –

+1

Нет отредактированный код также не выполняет @ Требование PratikButani. Я протестировал его. –

+0

это изменит цвет символов строки. и его работа. –

0

К сожалению,

Вы можете сделать это из макета XML:

<TextView 
android:background="#0000FF" 
android:textColor="#FFFFFF" /> 

или из кода

TextView tv1=(TextView) findViewById(R.id.tv1); 

tv1.setTextColor(Color.RED); 
tv1.setBackgroundColor(Color.GREEN); 
+1

Я хочу для фона; ( –

+1

вы правы чувак и спасибо за редактирование .. но я хочу backgroud только для первого слова. Я имею в виду в «Hello World», я хочу только bg для «Hello». –

+1

Okk Не беспокойтесь. Спасибо за ваши усилия. @SatyakiMukherjee –

0

Документов для Html класса показывает, что он не поддерживает все тег (а также, я предполагаю, атрибуты). Глядя на source code (строка 653), показано, что единственными атрибутами, которые он поддерживает для тега font, являются «цвет» и «лицо».

+0

Другие ответы делают это, я просто указывал, почему это не работать и выделять, что вам нужно быть осторожным при использовании этого класса. –

1

Нет опоры в Html.fromHtml() для цветов фона. Вам нужно будет настроить BackgroundColorSpan самостоятельно.

Например, this sample project подчеркивает условия поиска, используя цвет фона. Основной метод:

private void searchFor(String text) { 
    TextView prose=(TextView)findViewById(R.id.prose); 
    Spannable raw=new SpannableString(prose.getText()); 
    BackgroundColorSpan[] spans=raw.getSpans(0, 
              raw.length(), 
              BackgroundColorSpan.class); 

    for (BackgroundColorSpan span : spans) { 
     raw.removeSpan(span); 
    } 

    int index=TextUtils.indexOf(raw, text); 

    while (index >= 0) { 
     raw.setSpan(new BackgroundColorSpan(0xFF8B008B), index, index 
      + text.length(), Spanned.SPAN_EXCLUSIVE_EXCLUSIVE); 
     index=TextUtils.indexOf(raw, text, index + text.length()); 
    } 

    prose.setText(raw); 
    } 

Это первый использует getSpans() и removeSpan(), чтобы избавиться от предыдущих результатов поиска, перед созданием новых BackgroundColorSpan экземпляров и применяя их с помощью setSpan().

3
TextView tv=((TextView)findViewById(R.id.textView)); 
Spannable word=new SpannableString("HELLO SIDDHARTH"); 
word.setSpan(new BackgroundColorSpan(Color.BLUE), 1, 3, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE); 
tv.setText(word); 
+0

Его работа в простом 'TextView', но не работающая при связывании' TextView' в 'GridView' –

0

Вы можете попробовать это:

LinearLayout linearLayout= (LinearLayout) findViewById(R.id.department_content); 
LinearLayout.LayoutParams lparams = new LinearLayout.LayoutParams(
     LinearLayout.LayoutParams.WRAP_CONTENT, 
     LinearLayout.LayoutParams.WRAP_CONTENT); 

TextView tv=new TextView(this); 
tv.setLayoutParams(lparams); 
String head="<font color=#f5971b>"+this text with color+"</font>"; 
tv.setText(Html.fromHtml(head)); 
tv.append("\n"+"thid text in new line"); 
tv.setTextColor(Color.parseColor("#000000")); 

linearLayout.addView(tv); 
+0

Вы всегда используете фрагменты кода для обычного кода. предполагается использовать для HTML или javascript или другого кода, который может быть запущен в браузере. Вы не можете запускать Java в браузере. Используйте обычные кодовые блоки в будущее ... На этот раз я отредактирую ваш ответ и исправлю форматирование и т. д., но, пожалуйста, не делайте этого больше в будущем. Это не первый раз, когда я рассказал вам об этом ... –

1

Android официально не поддерживает фоновую окраску текста с помощью HTML, но я нашел обходной путь.

String str = "<span style=\"background-color:#f3f402;\">" + TEXT TO HIGHLIGHT + "</span>"; 

textView.setText(Html.fromHtml(str, Html.FROM_HTML_MODE_LEGACY)); 

Но, тем не менее, приведенный выше код работает только для Нуга (API 24) и выше.Таким образом, вы должны будете управлять HTML в различных версиях Android, как:

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) { 
    String str = "<span style=\"background-color:#f3f402;\">" + TEXT TO HIGHLIGHT + "</span>"; 
    textView.setText(Html.fromHtml(str, Html.FROM_HTML_MODE_LEGACY)); 
} else { 
    String str = "<font color='#f3f402'>" + TEXT TO HIGHLIGHT + "</font>"; 
    textView.setText(Html.fromHtml(str)); 
} 

Вы можете узнать больше о HTML тегов, поддерживаемых в Android здесь:

0

Я считаю, что это решение используется в библиотеке:

https://github.com/Pixplicity/HtmlCompat

Если вы генерировать HTML текст с полотнами, как: https://wordhtml.com/

<string name="html_text"> 
<![CDATA[ 
<p><span style="color: #0000ff;">Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Aenean commodo ligula eget dolor. Aenean massa. </span></p> 
<p><span style="background-color: #ffff99;">Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Donec quam felis, ultricies nec</span></p> 
]]> 
</string> 

Просто что-то, как это будет работать:

String htmltext = getString(R.string.html_text).replaceAll(": ",":"); 
Spanned fromHtml = HtmlCompat.fromHtml(getContext(), htmltext, 0); 
textView.setMovementMethod(LinkMovementMethod.getInstance()); 
textView.setText(fromHtml); 
Смежные вопросы