Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/213.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android Html.fromHtml()不使用文本的背景色_Android_Textview - Fatal编程技术网

Android Html.fromHtml()不使用文本的背景色

Android Html.fromHtml()不使用文本的背景色,android,textview,Android,Textview,我正在尝试使用Html.fromHtml()在TextView中设置背景。特别是,我想为第一个单词设置背景 我使用了以下代码: Html.fromHtml("<font color='red'>("+someText+")</font>"); Html.fromHtml(“+someText+”); 它正在使用文本颜色成功执行。但是我想改变背景颜色 我该怎么做?试试这个: TextView TV = (TextView) findViewById(R.id.mytex

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

我使用了以下代码:

Html.fromHtml("<font color='red'>("+someText+")</font>");
Html.fromHtml(“+someText+”);
它正在使用文本颜色成功执行。但是我想改变背景颜色

我该怎么做?

试试这个:

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

对不起

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

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

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

Html.fromHtml()
中不支持背景色。您需要自己设置
背景色span

例如,使用背景色高亮显示搜索词。关键方法是:

  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);
  }
它首先使用
getspan()
removeSpan()
删除以前的搜索结果,然后创建新的
BackgroundColorSpan
实例并通过
setSpan()
应用它们。您可以尝试以下方法:

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);
LinearLayout LinearLayout=(LinearLayout)findViewById(R.id.department\u内容);
LinearLayout.LayoutParams lparams=新的LinearLayout.LayoutParams(
LinearLayout.LayoutParams.WRAP_内容,
LinearLayout.LayoutParams.WRAP_内容);
TextView tv=新的TextView(此);
设置布局参数(lparams);
字符串头=“”+此文本带有颜色+”;
tv.setText(Html.fromHtml(head));
追加(“\n”+”新行中的thid文本”);
tv.setTextColor(Color.parseColor(#000000”);
线性布局。添加视图(电视);

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

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

textView.setText(Html.fromHtml(str, Html.FROM_HTML_MODE_LEGACY));
String str=“”+要高亮显示的文本+”;
setText(Html.fromHtml(str,Html.FROM_Html_MODE_LEGACY));
但是,上述代码仅适用于牛轧糖(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));
}
if(Build.VERSION.SDK\u INT>=Build.VERSION\u code.N){
字符串str=“”+要突出显示的文本+”;
setText(Html.fromHtml(str,Html.FROM_Html_MODE_LEGACY));
}否则{
字符串str=“”+要突出显示的文本+”;
setText(Html.fromHtml(str));
}
您可以在这里找到更多有关Android支持的HTML标记的信息:


    • 我认为一种解决方案是使用库:

      如果您使用以下网站生成html文本:


      对我来说,最好的解决方案是使用现在正式集成在Android X中的。因此,您可以直接从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));
      }
      
      String html=”“+someText+“”
      if(Build.VERSION.SDK\u INT>=Build.VERSION\u code.N){
      textView.setText(Html.fromHtml(Html,Html.FROM_Html_MODE_LEGACY));
      }否则{
      textView.setText(HtmlCompat.fromHtml(this.getContext(),html,HtmlCompat.FROM_html_MODE_LEGACY));
      }
      
      我想要背景;(你说得对,伙计,谢谢你的编辑.。但我只想为第一个词提供背景。我的意思是在“你好世界”中,我想为“你好”加背景音只有。OK别担心。谢谢你的努力。@SatyakiMukherjeeIts在GridView的适配器中不起作用。我试过使用示例,但在绑定时不起作用。不,你编辑的代码也不能满足@PratikButani的要求。我已经测试过了。但他要求更改文本部分的背景颜色。请在我的thr中查看他的评论ead.@SanketKachhela您是对的,但当我在GridView适配器中绑定数据时,它不起作用。其他答案是这样的,我只是指出它不起作用的原因,并强调在使用此类时需要小心。它在简单的
      TextView
      中起作用,但在
      GridV中绑定
      TextView
      时不起作用查看
      您总是对普通代码使用代码段。代码段只应用于HTML或javascript或其他可以在浏览器中运行的代码。您不能在浏览器中运行Java。将来使用普通代码块…我这次将为您编辑答案并修复格式等,但请不要这样做这不是我第一次告诉你这个…好吧,但是如何在一个针对API 26的项目中使用官方的Google Android X HtmlCompat?只需使用“Html.fromHtml(…);”。HtmlCompat中的所有功能现在都包含在Html中。你不需要包含另一个库(HtmlCompat)如果你只针对高于API 24的API。@Phlip我不能确认这一点。对我来说,一切都很好。你有一个例子吗?在哪个android版本上?它开始工作了。我用
      “yo dude”做的小实验
      失败了,但我的生产代码和生成的大量HTML都正常工作。想想看……这里不需要if-else
      HtmlCompat。fromHtml
      内部检查本身是否不再正常工作了!有什么原因吗???在安卓L上不工作
      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));
      }
      
      <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);
      
      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));
      }