2010-04-13 130 views
17

我將HTML投影到webview進行渲染。在HTML中,我需要加載我在/res/drawable中的圖片。@Android顯示/ res /可在WebView中查看

/res/drawable/my_image.png和代碼,例如這樣的:

final WebView browser = (WebView) findViewById(R.id.my_webview); 
String html = new MyHelper(myObject).getHtml(); 
browser.loadDataWithBaseURL("", html, "text/html", "UTF-8", ""); 

凡字符串html有類似:

<html><head> 
<h1>Here is the image</h1> 
<img src="my_image.png" /> 
</head><html> 

的問題是,應該是像src屬性是什麼參考圖片在/res/drawable

+1

我找到了適用於我的解決方案。我沒有弄清楚如何從/ res/drawable加載圖像,但我可以將圖像複製到/ assets並通過file引用圖像:///android_asset/my_image.png – MikeNereson 2010-04-13 16:09:22

+0

因此我複製了res/drawable/my_image。 png to assets/my_image.png然後使用 MikeNereson 2010-04-13 16:09:54

回答

30

這個工作在Android 2.2的

<img src = "file:///android_res/drawable/q1.png" /> 

其中q1.png是在res /繪製,華電國際文件夾

+0

**摩托羅拉變焦3.2 **我必須使它成爲'file:/ android_res/drawable/app_icon_1.png'。但這可能是因爲這是通過使用'mWebView.addJavascriptInterface()'的Java代碼在webview中插入的。 – 2012-03-12 11:36:25

+0

沒有在4上工作。1設備 – gregm 2012-07-25 17:12:55

+0

它爲我工作:) +1 @Superfuzz – 2013-09-23 11:28:01

5

我承認我對WebViews/HTML知之甚少,但似乎你正在爲此採取更復雜的路線。有一種簡單的方法來加載HTML文件;把它放在你的資產文件夾中,然後它可以被引用如下。

WebView webView = new WebView(this); 
webView.loadUrl("file:///android_asset/index.html"); 
setContentView(webView); 

顯然你的佈局更加複雜,因爲你擁有的不僅僅是更多的WebView,所以你不能直接使用setContentView(),但是這是基本的想法。然後來引用該HTML文件的圖像,我用了一個<img>標籤,像這樣:

<img src="res/drawable/icon.png"/> 

這是否對你的工作?

+0

其off主題,但loadUrl不適合。我從我們的應用程序之一下載HTML片段,裝飾該HTML,然後將HTML發送到視圖。對於這個特定的用例,我得到了具有對象標籤的HTML來顯示FLV。我必須用FLV的MP4代替錨點標記。錨標籤包含一個圖像,一個播放按鈕。這個播放按鈕是我嘗試加載的資源。 不起作用。 – MikeNereson 2010-04-13 16:02:00

+0

嗯。奇怪如上所述不起作用,但它可能會混淆起始文件夾的位置。無論如何,從你的評論直接回答這個問題,似乎你找到了解決這個問題的方法。我很高興對資產文件夾的評論有所幫助,即使我正在走另一條軌道! – 2010-04-13 17:06:40

+0

儘管Superfuzz的解決方案似乎適用於Android2.2 +,但這種方法似乎可以縮減到Android1.6。在模擬器中測試。順便說一下史蒂夫海利+1,我可能永遠不會來到這一輪沒有這個職位的解決方案。 – Samuel 2011-12-08 02:38:35

0

我有相同的問題,但也將在res/drawable的圖像文件(這是我首先要創造,我HUST有繪製,華電國際,-ldpi和-mdpi已經存在)或使用file:///asset/網址爲我工作。

這裏是我做的:

活動:

public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.main); 

     mWebView = (WebView) findViewById(R.id.webview); 
     mWebView.getSettings().setJavaScriptEnabled(true); 
     String summary = "<html><body><div style=\"background:red; width:300px; height:50px;\"></div><img src=\"res/drawable/banner300.jpg\"/></body></html>"; 
     mWebView.loadData(summary, "text/html", "utf-8"); 

然後在res/drawable我把banner300.jpg - 但它並沒有顯示出來。有任何想法嗎?

2

從我的測試路徑,「文件:/// android_res /繪製/ Q1 .png「只適用於2.2+。對於2.1給出文件未找到錯誤。將資源移動到資產將可以工作,但如果要使用可繪製功能(意味着您需要每個文件夾中的圖像副本...),則這並不是真的可行。

-3

您加載繪項目,就像您在你的代碼別的地方... http://developer.android.com/guide/topics/resources/drawable-resource.html

Resources res = getResources(); 
Drawable drawable = res.getDrawable(R.drawable.myimage); 

也@MikeNereson採用Android,你只能直接訪問位於資源目​​錄和SD卡的RAW文件。

+0

...通過訪問我的意思是操縱,修改,上傳和刪除的能力。這意味着一旦該文件位於可繪製文件夾中,它將一直存在,除非您明確移除它並重新編譯apk。你的用戶也永遠無法對圖像做任何事情。 – rf43 2011-07-01 19:34:58

+3

這個答案與用WebView顯示HTML顯示圖像有什麼關係? – 2012-01-30 22:24:45

3

user302750,

您的方法不正確。 res/drawable/banner300.jpg應該是file:///android_res/drawable/banner300.jpg

banner300.jpg可以位於您項目的以下位置之一,並且android會自動爲您正在使用的設備加載正確的位置。

  • res/drawable/banner300.jpg
  • res/drawable-ldpi/banner300.jpg
  • res/drawable-mdpi/banner300.jpg
  • res/drawable-hdpi/banner300.jpg
  • res/drawable-xhdpi/banner300.jpg

assets文件夾是,你並不需要使用不同版本的通用資源。一個例子可能是一個XSL模板,或者這種性質。

MikeNereson,你對你的問題的迴應也是不正確的,可繪製資源應該包含在res目錄中。

下面是我自己項目的一個例子。 I輸出HTML,正是這樣:

<img src="file:///android_res/drawable/stats_btn.png"/> 

如果使用ldpi設備,我得到的ldpi圖像時,如果使用hdpimdpi,我得到一個合適的那些爲好。 Android將file:///android_res/drawable/stats_btn.png解析爲我在項目中使用的以下資源之一。

  • ./res/drawable-ldpi/stats_btn.png
  • ./res/drawable-hdpi/stats_btn.png
  • 有關文件./res/drawable-mdpi/stats_btn.png
2

答案:// URL可能不再工作由於Android 4.0。請參閱this question的回答。一種可行的方法是回答here