2012-04-07 57 views
1

我已經下載了網頁html和其中的圖像。現在,我試圖將它們展示給用戶。我已經嘗試了兩種不同的方法,並且不確定哪個最適合使用。兩者都有他們的問題。試圖加載下載的網頁和圖像

首先,我試着用下面的代碼文本視圖:

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

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

我真的很喜歡這是如何工作的,但有兩個問題。第一個,也是最困難的是,當一篇文章有​​很多圖像時,我會得到OutOfMemory fc's。 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; 
} 

} 

另一個問題是textview根據用戶選擇和設備方向有不同的寬度。如果視圖中的圖像大於文本視圖寬度,則會簡單地進行裁剪。但是,我相信我可以自己解決這個問題,而不會太困難。我只是沒有嘗試過,因爲我試圖先解決內存問題。但是,任何協助都將不勝感激。

我試過的另一種方法是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的解決方案。

如果我有選擇,我真的很喜歡TextView方法的工作,因爲我更喜歡它的外觀與WebView呈現的東西的方式。

回答

1

你在這裏試圖做的是從根本上改變網絡內容的呈現方式 - 交換網站作者(可能是你,我不知道)寫的背景是什麼。反正HTML真的不支持Web內容的透明背景,所以我能想到的唯一的東西你可以嘗試是實際編輯通過JavaScript的網頁內容:

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

(與替換以上顏色你選擇的顏色)調用WebView加載後將清除HTML上的任何背景,但是當涉及任何嵌入式樣式時,你仍然會遇到問題。

至於你的圖像問題,你打開所有圖像的默認大小,並保持在內存中。 WebView爲您做的一件事就是保持網頁圖像的十進制渲染(如縮小)。如果你想修復你的內存佔用,你最好的選擇就是暫時將圖像保存到磁盤上,並且只有當用戶滾動到圖像需要的位置時纔打開它們 - 這一切都不容易,但這是確保您不會溢出分配的堆空間的唯一方法。

+0

webview圖像和textview圖像如何不同大小?這兩個都是在圖像加載大約300x500。 webview如何進一步縮小呢?其他應用程序能夠完成這一點(透明的網絡視圖或內存安全的文本視圖),並且這種做法已經足夠普遍(幾乎每個離線rss閱讀器),我不會想象它會非常困難。 – 2012-04-07 20:29:46

+0

我不確定這一點,但我認爲webview正在抽取圖像以在屏幕上顯示它們 - 它可能不是。但是,當然最大的問題是如果你能避免它們,就不要一次把它們都放在內存中。它也可能有助於在清單中將您的應用程序標記爲需要超過默認堆空間 – JRaymond 2012-04-07 20:41:04

+0

感謝關於堆空間的提示。這就是我所尋找的訣竅。這看起來是處理如此大量圖像的唯一方法。如果可以的話,我仍然會嘗試讓webview工作,因爲我無法使用這麼多內存,但目前爲止這很棒。 – 2012-04-07 21:30:47