tag - android xml parser library




如何在TextView中顯示HTML? (10)

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

我有簡單的HTML

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

我想在TextView顯示HTML樣式的文本。 這個怎麼做?


下面的代碼給了我最好的結果。

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

如果你只是想顯示一些HTML文本,並不真的需要一個TextView ,然後採取一個WebView並使用它,如下所示:

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

這並不限制你使用一些html標籤。


如果您嘗試從字符串資源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));

看到這個post的進一步細節。


您需要使用Html.fromHtml()在您的XML字符串中使用HTML。 在佈局XML中簡單地引用帶有HTML的字符串將不起作用。

例如(<Android Nougat):

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

例如(> = Android Nougat):

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



有人建議通過各種不同的答案來使用這裡建議的Html.fromHtml()框架類,但不幸的是,這個類在不同版本的Android和各種未解決的錯誤中具有不同的行為,如問題23512875953

因此,您可能希望使用兼容庫來標準化和反向安卓版本的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);

為strings.xml文件中的字符串使用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方法對文本進行格式化之後,字符串文本中的CData部分仍可保持html標記數據不變。 所以,Html.fromHtml(str)可以正常工作,並且您會在歡迎消息中看到粗體文本。

輸出:

歡迎來到您最喜愛的音樂應用程序商店。 以用戶名登錄


簡單使用Html.fromHtml("html string") 。 這將工作。 如果字符串有<h1>這樣的標籤,則會出現空格。 但我們無法消除這些空間。 如果您仍想刪除空格,則可以刪除字符串中的標記,然後將該字符串傳遞給方法Html.fromHtml("html string"); 。 一般來說,這些字符串來自服務器(動態),但並不經常,如果最好將字符串傳遞給方法,而不是嘗試從字符串中移除標記。


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());




android-textview