如何在TextView中显示HTML?

我有简单的HTML

<h2>Title</h2><br> <p>description here</p> 

我想在TextView显示HTML样式的文本。 这个怎么做?

您需要使用Html.fromHtml()在XMLstring中使用HTML。 在布局XML中简单引用带有HTML的string将不起作用。

例如(<Android的牛轧糖):

 myTextView.setText(Html.fromHtml("<h2>Title</h2><br><p>Description here</p>")); 

例如(> = Android的牛轧糖):

 myTextView.setText(Html.fromHtml("<h2>Title</h2><br><p>Description here</p>", Html.FROM_HTML_MODE_COMPACT)); 

要区分Android版本,请使用Build.VERSION.SDK_INT >= Build.VERSION_CODES.N

看看这个: https : //stackoverflow.com/a/8558249/450148

这也不错!

 <resource> <string name="your_string">This is an <u>underline</u> text demo for TextView.</string> </resources> 

它只适用于less数标签。

setText(Html.fromHtml(bodyData))在api 24之后被弃用。现在你必须这样做:

  if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.N) { tvDocument.setText(Html.fromHtml(bodyData,Html.FROM_HTML_MODE_LEGACY)); } else { tvDocument.setText(Html.fromHtml(bodyData)); } 

如果你希望能够通过xml进行configuration,而不需要在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"/> 

下面的代码给了我最好的结果。

 TextView myTextview = (TextView) findViewById(R.id.my_text_view); htmltext = <your html (markup) character>; Spanned sp = Html.fromHtml(htmltext); myTextview.setText(sp); 

如果您尝试从string资源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)); 

看到这个职位进一步的细节。

值得一提的是, Html.fromHtml(String source)方法在API级别24 以前不推荐使用。如果这是您的目标API,则应该使用Html.fromHtml(String source,int flags) 。

 String value = "<html> <a href=\"http://example.com/\">example.com</a> </html>"; SiteLink= (TextView) findViewById(R.id.textViewSite); SiteLink.setText(Html.fromHtml(value)); SiteLink.setMovementMethod(LinkMovementMethod.getInstance()); 

如果你只是想显示一些HTML文本,并不真的需要一个TextView ,然后采取一个WebView并使用它,如下所示:

 String htmlText = ...; webview.loadData(htmlText , "text/html; charset=UTF-8", null); 

这并不限制你几个HTML标签。

对于strings.xml文件中的string使用CData部分来得到HTML内容的实际显示的TextView的下面的代码片段的最佳方法将给你公平的想法。

 //in string.xml file <string name="welcome_text"><![CDATA[<b>Welcome,</b> to the forthetyroprogrammers blog Logged in as:]]> %1$s.</string> //and in Java code String welcomStr=String.format(getString(R.string.welcome_text),username); tvWelcomeUser.setText(Html.fromHtml(welcomStr)); 

即使在使用String.format方法格式化文本之后,string文本中的CData部分也可以保持html标记数据不变。 所以,Html.fromHtml(str)工作正常,你会看到欢迎消息中的粗体文本。

输出:

欢迎到您最喜爱的音乐应用程序商店。 以用户名login

我也想build议下面的项目: https : //github.com/NightWhistler/HtmlSpanner

用法与默认的android转换器几乎相同:

 (new HtmlSpanner()).fromHtml() 

find它之后,我已经开始自己的HTML到spannable转换器的实现,因为标准Html.fromHtml没有提供足够的灵活性渲染控制,甚至没有可能使用TTF的自定义字体

简单的使用Html.fromHtml("html string") 。 这将工作。 如果string有<h1>这样的标签,那么空格就会出现。 但是我们不能消除这些空间。 如果你仍然想删除空格,那么你可以删除string中的标签,然后将string传递给方法Html.fromHtml("html string"); 。 一般来说,这些string来自服务器(dynamic),但不是经常的,如果情况更好的话,传递string,而不是尝试从string中删除标签。

 String value = html value .... mTextView.setText(Html.fromHtml(value),TextView.BufferType.SPANNABLE) 

我已经实现了这个使用Web视图。 在我的情况下,我不得不从URL加载图像连同在文本视图中的文本,这对我的作品。

 WebView myWebView =new WebView(_context); String html = childText; String mime = "text/html"; String encoding = "utf-8"; myWebView.getSettings().setJavaScriptEnabled(true); myWebView.loadDataWithBaseURL(null, html, mime, encoding, null); 

有人build议通过各种不同的答案来使用这里build议的Html框架类,但不幸的是,这个类在不同版本的Android和各种未解决的错误中有不同的行为,如问题214637,14778,235128和75953所示 。

因此,您可能希望使用兼容性库来标准化和回溯Html类在各个Android版本之间,这些版本包含更多元素和样式的callback:

https://github.com/Pixplicity/HtmlCompat

虽然它与框架的Html类相似,但需要一些签名更改以允许更多的callback。 以下是来自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);