我正在尝试使用TextView
在Html.fromHtml()
中设置背景。特别是,我想在第一个单词上设置背景。
我使用了以下代码:
Html.fromHtml("<font color='red'>("+someText+")</font>");
它正在以文本颜色成功执行。但是我想改变背景颜色。
我该怎么做?
答案 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);