Jak wyświetlić HTML w TextView?
Mam prosty HTML :
<h2>Title</h2><br>
<p>description here</p>
Chcę wyświetlić tekst w stylu HTML w TextView
. Jak to zrobić?
18 answers
Musisz użyć Html.fromHtml()
aby używać HTML w ciągach XML. Po prostu odwoływanie się do ciągu HTML w układzie XML nie będzie działać.
Na przykład ( Na przykład (>=Android Nougat): Aby odróżnić wersje Androida Użyj myTextView.setText(Html.fromHtml("<h2>Title</h2><br><p>Description here</p>"));
myTextView.setText(Html.fromHtml("<h2>Title</h2><br><p>Description here</p>", Html.FROM_HTML_MODE_COMPACT));
Build.VERSION.SDK_INT >= Build.VERSION_CODES.N
.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-02-05 08:48:18
Spójrz na to: https://stackoverflow.com/a/8558249/450148
To jest całkiem dobre!!
<resource>
<string name="your_string">This is an <u>underline</u> text demo for TextView.</string>
</resources>
Działa tylko dla kilku tagów.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-05-23 12:02:50
SetText(Html.fromhtml (bodyData)) jest przestarzałe po api 24. Teraz musisz to zrobić:
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));
}
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-01-11 07:40:04
Jeśli chcesz być w stanie skonfigurować go za pomocą xml bez żadnych modyfikacji w kodzie java może okazać się pomocny. Po prostu wywołujesz INIT z konstruktora i ustawiasz tekst jako 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"/>
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-12-13 20:20:56
Poniższy kod dał mi najlepszy wynik.
TextView myTextview = (TextView) findViewById(R.id.my_text_view);
htmltext = <your html (markup) character>;
Spanned sp = Html.fromHtml(htmltext);
myTextview.setText(sp);
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-06-22 15:06:46
Jeśli próbujesz wyświetlić kod HTML z identyfikatora zasobu łańcuchowego, formatowanie może nie pojawić się na ekranie. Jeśli tak się dzieje, spróbuj użyć tagów 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));
[[2]}Zobacz ten post aby uzyskać więcej szczegółów.Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-05-23 10:31:36
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());
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-12-02 13:15:45
Jeśli chcesz po prostu wyświetlić tekst html i nie potrzebujesz TextView
, Weź WebView
i użyj go w następujący sposób:
String htmlText = ...;
webview.loadData(htmlText , "text/html; charset=UTF-8", null);
Nie ogranicza to również do kilku znaczników html.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-06-26 13:51:38
Warto wspomnieć, że metoda Html.fromHtml (String source) jest przestarzały od poziomu API 24. Jeśli jest to twoje docelowe API, powinieneś użyć Html.fromHtml (String source, int flags) zamiast.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-06-22 05:31:34
Najlepsze podejście do używania sekcji CData dla Ciągu w łańcuchach.plik xml aby uzyskać rzeczywiste wyświetlanie zawartości html do TextView poniższy fragment kodu daje uczciwy pomysł.
//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));
Sekcja CData w tekście łańcuchowym zachowuje nienaruszone dane znaczników html nawet po sformatowaniu tekstu za pomocą ciągu Łańcuchowego.metoda formatowania. Więc Html.fromHtml (str) działa dobrze i zobaczysz pogrubiony tekst w wiadomości powitalnej.
Wyjście:
Witaj w swojej ulubionej aplikacji muzycznej sklep. Zalogowany jako: username
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-08-19 11:59:47
Chciałbym również zaproponować następujący projekt: https://github.com/NightWhistler/HtmlSpanner
Użycie jest prawie takie samo jak domyślny konwerter Androida:
(new HtmlSpanner()).fromHtml()
Znalazłem go po tym, jak już zacząłem od własnej implementacji HTML do spannable converter, ponieważ standard Html.fromHtml nie zapewnia wystarczającej elastyczności nad kontrolą renderowania, a nawet nie ma możliwości użycia niestandardowych czcionek z ttf
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-03-12 08:15:43
Proste użycie Html.fromHtml("html string")
. To zadziała. Jeśli łańcuch znaków ma znaczniki typu <h1>
, to pojawią się spacje. Ale nie możemy wyeliminować tych przestrzeni. Jeśli nadal chcesz usunąć spacje, możesz usunąć znaczniki w łańcuchu, a następnie przekazać łańcuch do metody Html.fromHtml("html string");
. Również ogólnie łańcuchy te pochodzą z serwera (dynamiczne), ale nie często, jeśli jest to lepiej przekazać łańcuch tak, jak to jest do metody, niż próbować usunąć znaczniki z łańcucha.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-05-11 00:01:09
String value = html value ....
mTextView.setText(Html.fromHtml(value),TextView.BufferType.SPANNABLE)
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-01-27 12:40:40
Zaimplementowałem to używając widoku web. W moim przypadku muszę załadować obraz z adresu URL wraz z tekstem w widoku tekstu i to działa dla mnie.
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);
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-12-04 11:18:34
Zostało zasugerowane poprzez różne odpowiedzi, aby używać Html klasy framework, jak sugerowano tutaj, ale niestety ta klasa ma inne zachowanie w różnych wersjach Androida i różne nieadresowane błędy, jak pokazano w problemach 214637, 14778, 235128 oraz 75953.
Możesz więc użyć biblioteki zgodności do standaryzacji i backportu klasy Html w wersjach Androida, która zawiera więcej wywołań zwrotnych dla elementy i stylizacja:
Chociaż jest podobna do klasy Html frameworka, pewne zmiany podpisu były wymagane, aby umożliwić więcej wywołań zwrotnych. Oto przykład ze strony 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);
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-03-15 08:26:02
Za każdym razem, gdy piszesz niestandardowy widok tekstu, podstawowa funkcja HTML set text zostanie usunięta z niektórych urządzeń.
Więc musimy wykonać następujące dodatkowe kroki make is work
Public class CustomTextView extends TextView {
//Inside constructor
setText(Html.fromHtml(getText().toString()));
}
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-08-17 06:10:49
Make a global method like:
public static Spanned stripHtml(String html) {
if (!TextUtils.isEmpty(html)) {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
return Html.fromHtml(html, Html.FROM_HTML_MODE_COMPACT);
} else {
return Html.fromHtml(html);
}
}
return null;
}
Możesz go również użyć w swojej aktywności/fragmencie:
text_view.setText(stripHtml(htmlText));
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-09-20 16:39:24
Pozwolę sobie zaproponować nieco chwiejne, ale wciąż genialne rozwiązanie! Pomysł zaczerpnąłem z tego artykułu i zaadaptowałem go na Androida. Zasadniczo używasz WebView
i wstawiasz HTML, który chcesz pokazać i edytować w edytowalnym znaczniku div. W ten sposób, gdy użytkownik dotknie WebView
, pojawi się klawiatura i umożliwi edycję. Oni po prostu dodać trochę JavaScript, aby odzyskać edytowany HTML i voila!
Oto kod:
public class HtmlTextEditor extends WebView {
class JsObject {
// This field always keeps the latest edited text
public String text;
@JavascriptInterface
public void textDidChange(String newText) {
text = newText.replace("\n", "");
}
}
private JsObject mJsObject;
public HtmlTextEditor(Context context, AttributeSet attrs) {
super(context, attrs);
getSettings().setJavaScriptEnabled(true);
mJsObject = new JsObject();
addJavascriptInterface(mJsObject, "injectedObject");
setWebViewClient(new WebViewClient(){
@Override
public void onPageFinished(WebView view, String url) {
super.onPageFinished(view, url);
loadUrl(
"javascript:(function() { " +
" var editor = document.getElementById(\"editor\");" +
" editor.addEventListener(\"input\", function() {" +
" injectedObject.textDidChange(editor.innerHTML);" +
" }, false)" +
"})()");
}
});
}
public void setText(String text) {
if (text == null) { text = ""; }
String editableHtmlTemplate = "<!DOCTYPE html>" + "<html>" + "<head>" + "<meta name=\"viewport\" content=\"initial-scale=1.0\" />" + "</head>" + "<body>" + "<div id=\"editor\" contenteditable=\"true\">___REPLACE___</div>" + "</body>" + "</html>";
String editableHtml = editableHtmlTemplate.replace("___REPLACE___", text);
loadData(editableHtml, "text/html; charset=utf-8", "UTF-8");
// Init the text field in case it's read without editing the text before
mJsObject.text = text;
}
public String getText() {
return mJsObject.text;
}
}
I tutaj jest składnikiem jako Gist.
Uwaga: I nie trzeba zmiany wysokości oddzwaniania z oryginalnego rozwiązania, więc brakuje tutaj, ale można łatwo dodać go w razie potrzeby.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-09-27 07:10:30