0

StackExchangeにアクセスするためのAndroidアプリを作成しており、StackExchangeAPIで使用される単純なHTMLフラグメントのレンダリングを処理するための最良の方法を探しています。APIの唯一のHTMLは、質問、回答、およびコメントの本文にあります。もちろん、コメントはより制限されたHTMLのサブセットを使用します。ほとんどのHTMLは、、、など<p>の単純なフォーマットですが、時折あります。<b><pre><a><img>処理するタグ。TextViewを使用して、HTMLをスタイリングに置き換えることを検討していましたが、制限が多すぎる可能性があります。WebViewを調べましたが、それはほとんどやり過ぎのようです。WebViewは、外部の動的コンテンツをロードし、複数のスレッドを開始するためのもののようです。私は、CSSやJavaScriptを含まないAPIで提供される単純な固定HTMLのレンダリングのみを計画しています。

また、WebViewでエンコードの問題が発生しており、中引用符などの文字が複数の文字として表示され、TextViewで使用すると正常に表示されます。

4

1 に答える 1

1

あなたができることは、Html.fromHtml() 関数を使用することです。

Spanned-タイプのオブジェクトが残ります。タグを処理するために、場所に個別のスパンを使用する場合がありますか?

タグを編集する例。状況:html.fromhtmlを使用して機能するhtmlタグ付きのテキスト。ただし、URLが相対的である場合(「http://domain.com/file.html」の代わりに「/file.html」を使用)、使用できない場合があります。以下の関数にspannableを送信すると、URLのすべてのスパンが検索され、ドメインが追加されます。もちろん、特定のタグに他の何かを使用することもできます。

protected Spanned correctLinkPaths (Spanned spantext) {
    Object[] spans = spantext.getSpans(0, spantext.length(), Object.class);
    for (Object span : spans) {
        int start = spantext.getSpanStart(span);
        int end = spantext.getSpanEnd(span);
        int flags = spantext.getSpanFlags(span);
        if (span instanceof URLSpan) {
            URLSpan urlSpan = (URLSpan) span;

            if (!urlSpan.getURL().startsWith("http")) {
                if (urlSpan.getURL().startsWith("/")) {
                    urlSpan = new URLSpan("http://www.domain.com" + urlSpan.getURL());
                } else {
                    urlSpan = new URLSpan("http://www.domain.com/" + urlSpan.getURL());
                }
            }

            ((Spannable) spantext).removeSpan(span);
            ((Spannable) spantext).setSpan(urlSpan, start, end, flags);
        }
    }
    return spantext;
}

これが最も効率的な方法かどうかはわかりませんが、これはスパナブルへの最初の接続の1つでしたが、少なくとも、スパナブルで実行できるいくつかのトリックを示しています:D

于 2011-04-09T12:28:32.360 に答える