我有简单的HTML:
<h2>Title</h2><br>
<p>description here</p>
我想在TextView中显示HTML样式的文本。如何做到这一点?
我有简单的HTML:
<h2>Title</h2><br>
<p>description here</p>
我想在TextView中显示HTML样式的文本。如何做到这一点?
当前回答
如果您只想显示一些html文本,而实际上不需要TextView,那么使用WebView,如下所示:
String htmlText = ...;
webview.loadData(htmlText , "text/html; charset=UTF-8", null);
这也不会限制您使用几个html标记。
其他回答
我还想建议以下项目:https://github.com/NightWhistler/HtmlSpanner
用法与默认的android转换器几乎相同:
(new HtmlSpanner()).fromHtml()
在我已经开始自己实现html到可扩展转换器之后发现了它,因为标准html.fromHtml在渲染控制上没有足够的灵活性,甚至不可能使用ttf中的自定义字体
如果您希望能够通过xml配置它,而不需要对java代码进行任何修改,您可能会发现这个想法很有用。只需从构造函数调用init并将文本设置为html
public class HTMLTextView extends TextView {
... constructors calling init...
private void init(){
setText(Html.fromHtml(getText().toString()));
}
}
xml格式:
<com.package.HTMLTextView
android:text="@string/about_item_1"/>
有人通过各种答案建议使用Html框架类,但不幸的是,这个类在不同版本的Android和各种未解决的bug中有不同的行为,如问题214637、14778、235128和75953所示。
因此,您可能希望使用兼容库来跨Android版本标准化和反向移植Html类,其中包括更多元素和样式的回调:
Github项目HtmlCompat
虽然它与框架的Html类相似,但需要对签名进行一些更改以允许更多的回调。下面是GitHub页面的示例:
Spanned fromHtml = HtmlCompat.fromHtml(context, source, 0);
// You may want to provide an ImageGetter, TagHandler and SpanCallback:
//Spanned fromHtml = HtmlCompat.fromHtml(context, source, 0,
// imageGetter, tagHandler, spanCallback);
textView.setMovementMethod(LinkMovementMethod.getInstance());
textView.setText(fromHtml);
简单地使用
checkBoxTextView.text =
Html.fromHtml("<p><font color=#666666>I agree to</font><font color=#0173B7> <b><u>Terms & Conditions</u></b></font><font color=#666666> and the <u></font><b><font color=#0173B7>Privacy Policy</font></u></b></font></p>")
如果您试图从字符串资源id显示HTML,则格式可能不会显示在屏幕上。如果发生这种情况,请尝试使用CDATA标记:
strings.xml:
<string name="sample_string"><![CDATA[<h2>Title</h2><br><p>Description here</p>]]></string>
...
MainActivity.java:
text.setText(Html.fromHtml(getString(R.string.sample_string));
有关更多详细信息,请参阅本文。