2010-04-13 12 views
17

Sto lanciando HTML a una webview per il rendering. Nel codice HTML ho bisogno di caricare un'immagine che ho in /res/drawable.@Android display/res/visualizzabile in WebView

devo /res/drawable/my_image.png e il codice come questo:

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

dove la stringa html ha qualcosa come:

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

La domanda è: che cosa dovrebbe quell'immagine src attributo essere quello di fare riferimento alla immagine in /res/drawable?

+1

Ho trovato una soluzione che funziona per me. Non ho capito come caricare immagini da/res/drawable, ma posso copiare l'immagine in/assets e fare riferimento all'immagine per file: ///android_asset/my_image.png – MikeNereson

+0

Così ho copiato res/drawable/my_image. png su assets/my_image.png quindi utilizzare MikeNereson

risposta

30

questo ha funzionato in

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

dove q1.png si trova nella cartella res/drawable-hdpi

+0

** Motorola Zoom 3.2 ** ho dovuto renderlo 'file:/android_res/drawable/app_icon_1.png'. Ma potrebbe essere perché è stato inserito in webview tramite Javacode usando 'mWebView.addJavascriptInterface()'. –

+0

non ha funzionato su 4.1 dispositivo – gregm

+0

funziona per me grazie :) +1 @Superfuzz –

5

Ammetto che non ne so molto di WebViews/HTML, ma sembra che tu stia prendendo la via più complicata per questo. C'è un modo semplice per caricare il file HTML; mettilo nella tua cartella delle risorse, e quindi può essere riferito come segue.

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

Ovviamente il layout è più complessa quando si dispone di più di una semplice WebView quindi non è possibile utilizzare setContentView() direttamente, ma questa è l'idea di base. Poi per fare riferimento a un'immagine in quel file HTML, ho usato un tag <img> in questo modo:

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

fa questo lavoro per voi?

+0

come argomento secondario, ma loadUrl non è adatto. Sto scaricando frammenti HTML da una delle nostre applicazioni, decorando quell'HTML e poi inviando l'HTML alla vista. Per questo particolare caso d'uso sto ottenendo HTML che ha un tag oggetto per mostrare un FLV. Devo sostituirlo con un tag di ancoraggio all'MP4 del FLV. Il tag di ancoraggio contiene un'immagine, un pulsante di riproduzione. Questo pulsante di riproduzione è la risorsa che sto tentando di caricare. non funziona. – MikeNereson

+0

Hmm. Strano che lo come descritto sopra non funzioni, ma probabilmente si confonde con la cartella di partenza. Comunque, a giudicare dai tuoi commenti direttamente alla domanda, sembra che tu abbia trovato un modo per risolvere questo problema. Sono contento che il commento sulla cartella delle risorse sia stato di aiuto, anche se stavo seguendo una traccia diversa! –

+0

Anche se la soluzione di Superfuzz sembra funzionare per Android2.2 +, questo approccio sembra ridimensionarsi ad Android1.6. Testato in emulatore. Tra l'altro +1 per Steve Haley, potrei non venire mai a questo round di soluzioni senza questo post. – Samuel

0

mi hanno lo stesso identico problema, ma né mettendo il file di immagine in res/drawable (che ho dovuto creare, ho avuto hust drawable-hdpi, -ldpi e -mdpi già esistenti) oppure utilizzando l'URL file:///asset/ ha funzionato per me .

Ecco quello che faccio:

attività:

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"); 

Poi nel res/drawable ho messo il banner300.jpg - ma non si presenta. Qualche idea?

2

Dal mio test del percorso, file di Android 2.2 ": /// android_res/drawable/q1 .png "funziona solo con 2.2+. Per 2.1 che dà un errore di file non trovato. Lo spostamento della risorsa in risorse funzionerà, ma ciò non è realmente fattibile se si desidera utilizzare le funzionalità estraibili (il che significa che è necessaria una copia dell'immagine in ogni cartella ...).

-3

si carica il drawable come si farebbe in qualsiasi altro luogo nel codice ... http://developer.android.com/guide/topics/resources/drawable-resource.html

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

anche @MikeNereson utilizzando Android, si può solo accedere direttamente i file RAW che si trovano nella directory di beni e SDCard .

+0

... e per accesso intendo la possibilità di manipolare, modificare, caricare ed eliminare. Ciò significa che una volta che il file si trova nella cartella drawable, sarà sempre presente a meno che non lo rimuovi esplicitamente e ricompili il tuo apk. Anche il tuo utente non sarà mai in grado di fare nulla con l'immagine. – rf43

+3

Che cosa ha a che fare questa risposta con la visualizzazione di un'immagine con HTML visualizzata in una WebView? –

3

user302750,

Il tuo metodo non è corretto. res/drawable/banner300.jpg dovrebbe essere file:///android_res/drawable/banner300.jpg.

banner300.jpg può trovarsi in uno dei seguenti percorsi del progetto e Android caricherà automaticamente quello corretto per il dispositivo che si sta utilizzando.

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

La cartella assets è per le risorse generiche che non ti servono diverse versioni di. Un esempio potrebbe essere un modello XSL o qualcosa di simile.

MikeNereson, la tua risposta al tuo problema è anche errata, le risorse estraibili dovrebbero essere contenute nella directory res.

Ecco un esempio tratto dal mio progetto. I html uscita, esattamente così:

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

Se si utilizza un dispositivo ldpi, ottengo immagine ldpi, se si utilizza hdpi o mdpi, ottengo quella appropriata per quelle pure. Android risolve file:///android_res/drawable/stats_btn.png in una delle seguenti risorse che ho nel mio progetto.

  • ./res/drawable-ldpi/stats_btn.png
  • ./res/drawable-hdpi/stats_btn.png
  • ./res/drawable-mdpi/stats_btn.png
2

risposte che coinvolgono file: // URL potrebbero non funzionare più come di Android 4.0. Vedi risposta a this question. Un modo che funzionerà è nella risposta here.