1. ホーム
  2. android

[解決済み] AndroidのTextViewにhtmlからインラインで画像を表示することは可能ですか?

2023-04-11 17:50:15

質問

次のようなHTMLがあるとする。

<p>This is text and this is an image <img src="http://www.example.com/image.jpg" />.</p>

画像をレンダリングさせることは可能でしょうか?このスニペットを使用する場合。 mContentText.setText(Html.fromHtml(text)); を使用すると、黒い縁取りのあるシアン色のボックスが表示され、TextViewがimgタグが何であるかについて何らかの考えを持っていることを私に確信させます。

どのように解決するのですか?

もし、あなたが のドキュメントを見ると Html.fromHtml(text) と書いてあるのがわかると思います。

任意の <img> タグは一般的な置き換え画像として表示され、プログラムがそれを処理して実際の画像に置き換えることができます。

この置き換えを自分でやりたくない場合は を使うことができます。 Html.fromHtml() メソッド で、これは Html.TagHandler Html.ImageGetter をパースするテキストと同様に引数として与えます。

あなたの場合、パースできるのは null というように Html.TagHandler と同じですが、独自の Html.ImageGetter を実装する必要があります。

しかし、これから起こる問題は Html.ImageGetter は同期的に実行される必要があり、ウェブから画像をダウンロードする場合はおそらく非同期的に実行したいと思うでしょう。 もし、アプリケーションのリソースとして表示させたい画像を ImageGetter の実装はずっとシンプルになります。 以下のような感じです。

private class ImageGetter implements Html.ImageGetter {

    public Drawable getDrawable(String source) {
        int id;

        if (source.equals("stack.jpg")) {
            id = R.drawable.stack;
        }
        else if (source.equals("overflow.jpg")) {
            id = R.drawable.overflow;
        }
        else {
            return null;
        }

        Drawable d = getResources().getDrawable(id);
        d.setBounds(0,0,d.getIntrinsicWidth(),d.getIntrinsicHeight());
        return d;
    }
};

ソースの文字列をリソースIDにマッピングするための、よりスマートな方法を考え出したいと思うでしょうけど。