Android - локальное изображение в webview

Я пытаюсь diplay локальное изображение в моем веб-просмотре:

 String data = "<body>" + "<img src=\"file:///android_asset/large_image.png\"/></body>";
 webview.loadData(data, "text/html", "UTF-8");

Этот код ничего не отображает, а не:

 webview.loadUrl("file:///android_asset/large_image.jpg");

Это работает, но мне нужна сложная веб-страница, а не только изображение.

Любые идеи?

Ответ 1

Загрузите файл Html в Webview и поместите свое изображение в папку с ресурсами и прочитайте этот файл изображения с помощью Html.

<html>
  <table>
    <tr>
      <td>
        <img src="abc.gif" width="50px" alt="Hello">
      </td>
    </tr>
  </table>
</html>

Теперь загрузите этот Html файл в Webview

webview.loadUrl("file:///android_asset/abc.html");  

Ответ 2

Вы также можете попробовать

String data = "<body>" + "<img src=\"large_image.png\"/></body>";

webView.loadDataWithBaseURL("file:///android_asset/",data , "text/html", "utf-8",null);

Ответ 3

Один удобный способ (часто забываемый) - использовать встроенные образы base64 в HTML-контенте. Это также будет работать в мобильных браузерах Webkit (IOS, Android..).

Точка использования этого метода заключается в том, что вы можете вставлять изображения в контент HTML, а не сражаться с ссылками на изображения из веб-просмотра в ограниченную файловую систему.

  <img src="data:image/jpg;base64,xxxxxxxxxxxxxxxxxxxxxxxxxxxx"/>

  xxxxx = base64 encoded string of images bytes

Если вы хотите предоставить (базовые 64) данные изображения из файловой системы, вы можете, например:

1) В Android используется ContentProvider - который будет предоставлять строки с форматированием в формате base64.

<img src="content://.............."/>

2) Или вы можете предварительно обработать HTML с помощью JSOUP или аналогичного парсера DOM (перед установкой его в веб-просмотр) и настроить изображение src с соответствующим образом закодированным кодом base64.

Недостатками этого метода являются накладные расходы, включенные в преобразование образа в base64 string и, конечно же, при обработке больших данных HTML в webview.

Ответ 4

Используйте этот метод.

mview.loadDataWithBaseURL(folder.getAbsolutePath(), content, "text/html", "windows-1252", "");

folder.getAbsolutePath() может быть "file:///android_asset" или просто "/"

Ответ 5

Я думаю, что в коде отсутствует \

   String data = "<body>" + "<img src=\\"file:///android_asset/large_image.png\"/></body>";      

Ответ 6

enter image description here

 webView.loadDataWithBaseURL("file:///android_asset/", sourse, "text/html", "UTF-8", null);

Ответ 7

наилучшим подходом для меня было создание моего файла .html со всеми текстами и изображениями в MS-слове и сохранение файла в виде файла .html и копирование как файла .html, так и соответствующей папки вложений в активы папку и указав адрес файла .html в папке с ресурсами на webview.loadUrl()... Вот что вам нужно сделать...

WebView webview = (WebView) findViewById(R.id.webView1);

webview.loadUrl("file:///android_asset/learning1/learning1.htm");

Ответ 8

решение Zain работало для меня. Я забыл добавить мою папку www с файлами HTML и другими подпапками css и изображений и т.д.

webView.loadDataWithBaseURL("file:///android_asset/www/",data , "text/html", "utf-8",null);

..

Ответ 9

Самый простой и простой способ - создать html файл с редактором html, например kompozer или любым другим, что вам нравится.

Поместите свой html файл в папку с ресурсами и вызовите webView.loadUrl(filename). Папка активов также должна содержать все изображения, которые вы указываете в ваших html файлах.

Исправить заранее в html файле путь к вашим изображениям таким образом, чтобы вы только записывали чистое имя файла. Имя файла, которое вы передаете loadUrl, должно иметь префикс file:///android_asset/.

Если изображение или файл не загружается, проверьте имена файлов пробелы, дефис и другие странные вещи и измените имена файлов.