Html.fromHtml()不使用Text的背景颜色

时间:2014-01-04 11:23:26

标签: android textview

我正在尝试使用TextViewHtml.fromHtml()中设置背景。特别是,我想在第一个单词上设置背景。

我使用了以下代码:

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

它正在以文本颜色成功执行。但是我想改变背景颜色。

我该怎么做?

9 个答案:

答案 0 :(得分:8)

试试这个:

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)。

答案 1 :(得分:5)

Android官方不支持通过HTML对文本进行背景着色,但我找到了解决方法。

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

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

但是,上述代码仅适用于 Nougat(API 24)及更高版本。因此,您必须在不同的Android版本中管理HTML,例如:

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));
}

您可以在此处找到有关Android支持的HTML标记的更多信息:

答案 2 :(得分: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);

答案 3 :(得分: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()应用它们。

答案 4 :(得分:1)

对我来说,最好的解决方案是使用HtmlCompat,它现已正式集成在Android X GoogleHtmlCompat中。因此,您可以直接从API 24使用它,对于早期版本的API,可以通过将其添加到gradle脚本中来使用HtmlCompat库。 HtmlCompat提供了更多标签和一些内联样式(文本对齐,颜色,背景,背景颜色,文本装饰)。

要在TextView中设置字符串的背景色,可以使用以下命令:

String html = "<span style='background-color: #dff0d8;'>"+someText+"</span>"

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
    textView.setText(Html.fromHtml(html, Html.FROM_HTML_MODE_LEGACY));
} else {
    textView.setText(HtmlCompat.fromHtml(this.getContext(), html, HtmlCompat.FROM_HTML_MODE_LEGACY));
}

答案 5 :(得分:0)

抱歉,

您可以从XML布局执行此操作:

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

或代码

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

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

答案 6 :(得分:0)

Html类的文档表明它不支持所有标记(我也假设属性)。查看source code(第653行)显示,它为font标记支持的唯一属性是“color”和“face”。

答案 7 :(得分: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);

答案 8 :(得分: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);