如何在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:
虽然它与框架的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);