853

私は単純なHTMLを持っています:

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

でHTMLスタイルのテキストを表示したいTextView。これを行う方法?

4

28 に答える 28

1513

Html.fromHtml()XML 文字列で HTML を使用するには、 を使用する必要があります。レイアウト XML で HTML を使用して文字列を参照するだけでは機能しません。

これはあなたがJavaですべきことです

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
    textView.setText(Html.fromHtml("<h2>Title</h2><br><p>Description here</p>", Html.FROM_HTML_MODE_COMPACT));
} else { 
    textView.setText(Html.fromHtml("<h2>Title</h2><br><p>Description here</p>"));
}

そしてコトリンでは:

textView.text = if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
    Html.fromHtml(html, Html.FROM_HTML_MODE_COMPACT)
} else {
    Html.fromHtml(html)
}
于 2010-01-22T09:20:22.643 に答える
72

これを見てください:https://stackoverflow.com/a/8558249/450148

こちらもなかなかいいです!!

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

いくつかのタグでのみ機能します。

于 2012-05-06T06:17:34.170 に答える
46

Java コードを変更せずに xml を介して構成できるようにしたい場合は、このアイデアが役立つ場合があります。コンストラクターから 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"/>
于 2014-12-13T19:50:58.447 に答える
33

文字列リソース 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));

詳細については、この投稿を参照してください。

于 2016-07-08T17:22:43.650 に答える
25

以下のコードは私にとって最良の結果をもたらしました。

TextView myTextview = (TextView) findViewById(R.id.my_text_view);
htmltext = <your html (markup) character>;
Spanned sp = Html.fromHtml(htmltext);
myTextview.setText(sp);
于 2013-10-21T05:31:04.443 に答える
14
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());
于 2014-12-02T13:15:45.237 に答える
12

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

文字列テキストの CData セクションは、String.format メソッドを使用してテキストをフォーマットした後でも、html タグ データをそのまま保持します。したがって、Html.fromHtml(str) は正常に機能し、ウェルカム メッセージに太字のテキストが表示されます。

出力:

お気に入りのミュージック アプリ ストアへようこそ。次のようにログイン: ユーザー名

于 2016-08-19T07:15:23.923 に答える
6

次のプロジェクトも提案したいと思います: https://github.com/NightWhistler/HtmlSpanner

使用方法は、デフォルトの Android コンバーターとほぼ同じです。

(new HtmlSpanner()).fromHtml()

標準の Html.fromHtml はレンダリング制御に十分な柔軟性を提供せず、ttf からカスタムフォントを使用する可能性さえないため、html からスパン可能なコンバーターへの独自の実装によって既に開始した後にそれを見つけました。

于 2015-03-12T08:15:43.507 に答える
5

簡単な使用Html.fromHtml("html string")。これは機能します。文字列に次のようなタグがある場合、<h1>スペースが来ます。しかし、それらのスペースをなくすことはできません。それでもスペースを削除したい場合は、文字列内のタグを削除してから、文字列をメソッドに渡すことができますHtml.fromHtml("html string");。また、通常、これらの文字列はサーバー(動的)から取得されますが、文字列からタグを削除しようとするよりも、文字列をそのままメソッドに渡す方がよい場合は、そうではありません。

于 2013-02-23T10:54:52.320 に答える
4

これを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);
于 2015-12-04T11:18:34.520 に答える
4
String value = html value ....
mTextView.setText(Html.fromHtml(value),TextView.BufferType.SPANNABLE)
于 2016-01-27T10:07:20.390 に答える
4

次のようなグローバル メソッドを作成します。

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

次のようにアクティビティ/フラグメントで使用することもできます。

text_view.setText(stripHtml(htmlText));
于 2018-09-20T16:39:24.110 に答える
1

以下のコードを使用して解決策を取得します。

textView.setText(fromHtml("<Your Html Text>"))

ユーティリティ メソッド

public static Spanned fromHtml(String text)
{
    Spanned result;
    if (Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.N) {
        result = Html.fromHtml(text, Html.FROM_HTML_MODE_LEGACY);
    } else {
        result = Html.fromHtml(text);
    }
    return result;
}
于 2019-12-15T17:30:32.363 に答える
-1

Github のライブラリ ( https://github.com/jaredrummler/HtmlDslTextView )を使用して、Android 用の有効な HTML を作成できます。HtmlDsl

このライブラリは、Android によってレンダリングされる要素と属性のみをサポートすることで、コードをより理解しやすくし、エラーを起こしにくくするためのシンタックス シュガーを提供します。

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

Android でサポートされている HTML 要素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>
<sub>
<sup>
<tt>
<u>
<ul>
<li>
于 2021-09-25T07:59:10.697 に答える