892 Stimmen

Wie kann man HTML in TextView anzeigen?

Ich habe einfache HTML :

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

Ich möchte einen HTML-gestalteten Text in TextView . Wie ist dies zu tun?

8 Stimmen

Möchten Sie die Tags anzeigen oder weglassen?

1 Stimmen

Ein funktionierendes Beispiel finden Sie unter diesem Link javatechig.com/2013/04/07/how-to-display-html-in-Android-view

1 Stimmen

Wenn Sie nach einer veralteten Lösung suchen, sind Sie hier genau richtig stackoverflow.com/questions/37904739/

1voto

seyfullah.bilgin Punkte 975

Sie können eine einfache Kotlin-Erweiterungsfunktion wie diese verwenden:

fun TextView.setHtmlText(source: String) {
    this.text = HtmlCompat.fromHtml(source, HtmlCompat.FROM_HTML_MODE_LEGACY)
}

Und Verwendung:

textViewMessage.setHtmlText("Message: <b>Hello World</b>")

1voto

Omar Zerir Punkte 11

Textview.text = HtmlCompat.fromHtml( {htmlInhalt}, HtmlCompat.FROM_HTML_MODE_COMPACT)

0 Stimmen

0voto

AXE Punkte 8075

Darf ich eine etwas hakelige, aber dennoch geniale Lösung vorschlagen! Ich habe die Idee von dieser Artikel und hat es für Android angepasst. Grundsätzlich verwenden Sie eine WebView und fügen Sie den HTML-Code, den Sie anzeigen und bearbeiten möchten, in ein editierbares div-Tag ein. Auf diese Weise kann der Benutzer beim Tippen auf das WebView erscheint die Tastatur und ermöglicht die Bearbeitung. Sie fügen einfach etwas JavaScript hinzu, um den bearbeiteten HTML-Code zurückzubekommen und voila!

Hier ist der Code:

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

Und ici ist die Komponente als Gist.

Hinweis: Ich brauchte nicht die Höhe ändern Callback aus der ursprünglichen Lösung, so dass hier fehlt, aber Sie können es leicht hinzufügen, wenn nötig.

0voto

Jared Rummler Punkte 36806

Sie können gültiges HTML für Android erstellen TextView unter Verwendung der HtmlDsl Bibliothek auf Github: https://github.com/jaredrummler/HtmlDsl .

Die Bibliothek bietet syntaktischen Zucker, um den Code verständlicher und weniger fehleranfällig zu machen, indem sie nur Elemente und Attribute unterstützt, die von Android gerendert werden.

Beispiel für die Erstellung von HTML:

textView.setHtml {
    h3("Android Versions:")
    ul {
        li {
            a(href = "https://developer.android.com/about/versions/12/get") {
                +"Android 12 Beta"
            }
        }
        li("Android 11")
        li("Android 10")
        li("Pie")
        li("Oreo")
        li("Nougat")
        li("Marshmallow")
        li("Lollipop")
        // ...
    }

    small {
        sub {
            +"by "
            a {
                href = "https://github.com/jaredrummler"
                text = "Jared Rummler"
            }
        }
    }
}

Unterstützte HTML-Elemente für Android TextView :

<a href="...">
<b>
<big>
<blockquote>
<br>
<cite>
<dfn>
<div align="...">
<em>
<font color="..." face="...">
<h1>
<h2>
<h3>
<h4>
<h5>
<h6>
<i>
<img src="...">
<p>
<small>
<strike>
<strong>

<sup>
<tt>
<u>
<ul>
<li>

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X