1

ウェブページの html とその中の画像をダウンロードしました。今、私はそれらをユーザーに表示しようとしています。2 つの異なる方法を試しましたが、どちらを使用するのが最適かわかりません。どちらにも問題があります。

まず、次のコードでテキスト ビューを試しました。

TextView content = (TextView)findViewById(R.id.article_content);

MyImageGetter mig = new MyImageGetter(this, urlId);
Spanned span = Html.fromHtml(contents, mig, null);
content.setText(span);

2つの問題を除いて、これがどのように機能するかが本当に気に入っています。最初の、そして最も難しいのは、記事にたくさんの画像が含まれている場合です。私は OutOfMemory fc を取得します。MyImageGetter コードは次のとおりです。

public class MyImageGetter implements Html.ImageGetter{

String urlId = null;
Context c = null;

public MyImageGetter(ArticleViewer articleViewer, String urlId2) {
    c = articleViewer;
    urlId = urlId2;
}

public Drawable getDrawable(String source) {
    String[] brokenUrl = source.split("/");
    String imgName = brokenUrl[brokenUrl.length-1];

    File image = new File("/data/data/com.that1dev.RibbonReader/Offline/" + urlId + "/" + imgName);
    Log.w("MyApp", image.getAbsolutePath());
    Bitmap bm = BitmapFactory.decodeFile(image.getAbsolutePath());

    Drawable d = new BitmapDrawable(c.getResources(), bm);

    d.setBounds(0,0, d.getIntrinsicWidth(),d.getIntrinsicHeight());

    return d;
}

}

もう 1 つの問題は、ユーザーの選択とデバイスの向きに基づいてテキストビューの幅が異なることです。ビュー内の画像が textview の幅よりも大きい場合、単純にトリミングされます。しかし、私はそれを自分でそれほど難しくなく修正できると信じています. 最初にメモリの問題を修正しようとしているので、まだ一生懸命試していません。ただし、いずれかの支援をいただければ幸いです。

私が試したもう1つの方法は、webviewです。

WebView webContent = (WebView)findViewById(R.id.web_content);

webContent.loadDataWithBaseURL("", contents[1], "text/html", "utf-8", "");
webContent.setBackgroundColor(Color.TRANSPARENT);

残念ながら、これでは、何を試しても背景が白のままで、信じられないほど醜いです。3.0 および 4.0 で機能する回避策が見つからないようです。

選択肢があれば、WebView がレンダリングする方法よりも TextView メソッドの外観を優先したので、TextView メソッドが機能することを本当に望んでいます。

4

1 に答える 1

1

ここであなたがしようとしているのは、基本的に、Web コンテンツのレンダリング方法を変更することです。とにかく、HTML は Web コンテンツの透明な背景を実際にはサポートしていないため、JavaScript を介して Web コンテンツを実際に編集することしか考えられません。

myWebView.loadUrl("javascript:document.body.style.backgroundImage=\'\');
   document.body.style.backgroundColor=\"#00FF00\");");

(上記の色を選択した色に置き換えます) WebView の読み込み後にそれを呼び出すと、HTML の背景がクリアされますが、ボディにないネストされたスタイルに関してはまだ問題があります。

画像の問題に関しては、すべての画像をデフォルトのサイズで開き、それらをメモリに保持しています。WebView があなたのために行うことの 1 つは、Web ページの画像のデシメート (縮小など) レンダリングを維持することです。メモリ使用量を修正したい場合は、画像を一時的にディスクに保存し、ユーザーが画像が必要な場所までスクロールしたときにのみ画像を開くことをお勧めします。これは決して簡単ではありません。しかし、これが、割り当てられたヒープ領域をオーバーフローさせないようにする唯一の方法です。

于 2012-04-07T19:57:04.160 に答える