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