Pergunta

Estou jogando HTML em uma Webview para renderizar. No HTML, preciso carregar uma imagem que tenho em /res/drawable.

Eu tenho /res/drawable/my_image.png e código como este:

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

Onde a string html tem algo como:

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

A questão é: o que essa imagem deve src atributo seja para se referir à imagem em /res/drawable?

Foi útil?

Solução

Isso funcionou no Android 2.2

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

onde q1.png está na pasta res/drawable-hdpi

Outras dicas

Admito que não sei muito sobre o WebViews / HTML, mas parece que você está seguindo o caminho mais complicado para isso. Existe uma maneira fácil de carregar o arquivo HTML; Coloque -o na pasta de seus ativos e, em seguida, ele pode ser referido da seguinte forma.

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

Obviamente, seu layout é mais complexo, pois você tem mais do que apenas o WebView, para que você não possa usar setContentView() diretamente, mas essa é a ideia básica. Então, para fazer referência a uma imagem nesse arquivo html, usei um <img> etiqueta como assim:

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

Isso funciona para você?

user302750,

Seu método está incorreto. res/drawable/banner300.jpg deveria estar file:///android_res/drawable/banner300.jpg.

banner300.jpg pode estar em um dos locais a seguir em seu projeto e o Android carregará automaticamente o correto para o dispositivo que você está usando.

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

o assets A pasta é para recursos genéricos dos quais você não precisa de versões diferentes. Um exemplo pode ser um modelo XSL, ou algo dessa natureza.

Mikeneseson, sua resposta ao seu problema também está incorreta, os recursos desenhados devem estar contidos no res diretório.

Aqui está um exemplo do meu próprio projeto. Eu produzi html, exatamente assim:

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

Se estiver usando um ldpi dispositivo, eu entendo o ldpi imagem, se estiver usando hdpi ou mdpi, Eu recebo o apropriado para eles também. Android resolve file:///android_res/drawable/stats_btn.png a um dos seguintes recursos que tenho no meu projeto.

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

Nos meus testes, o caminho, "arquivo: ///android_res/drawable/q1.png" funciona apenas com 2.2+. Para 2.1, isso fornece um arquivo não encontrado. Mover o recurso para os ativos funcionará, mas isso não é realmente viável se você quiser usar os recursos desenhados (o que significa que você precisaria de uma cópia da imagem em cada pasta ...).

As respostas envolvendo o arquivo: // URLs podem não funcionar mais no Android 4.0. Veja a resposta para essa questão. Uma maneira que funcionará está na resposta aqui.

Eu tenho exatamente o mesmo problema, mas nem colocando o arquivo de imagem em res/drawable (que eu tive que criar, hust tinha drawable -hdpi, -ldpi e -mdpi já existindo) ou usando o file:///asset/ URL funcionou para mim.

Aqui está o que eu faço:

Atividade:

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

Então em res/drawable Coloquei o banner300.jpg - mas ele não aparece. Alguma ideia?

Você carrega os desenhos como faria em qualquer outro lugar do seu código ...http://developer.android.com/guide/topics/resources/drawable-source.html

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

Além disso, @MiKeneSON usando o Android, você pode acessar diretamente arquivos brutos diretamente localizados no diretório de ativos e no SDCARD.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top