Подтвердить что ты не робот

@Android отображение/res/просмотр в WebView

Я бросаю HTML в webview для рендеринга. В HTML мне нужно загрузить изображение, которое у меня есть в /res/drawable.

У меня есть /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>

Вопрос в том, должен ли атрибут image src ссылаться на изображение в /res/drawable?

4b9b3361

Ответ 1

Это работало в android 2.2

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

где q1.png находится в папке res/drawable-hdpi

Ответ 2

Я признаю, что я мало что знаю о 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"/>

Это работает для вас?

Ответ 3

user302750,

Ваш метод неверен. res/drawable/banner300.jpg должен быть file:///android_res/drawable/banner300.jpg.

banner300.jpg может быть в одном из следующих мест в вашем проекте, и андроид автоматически загрузит правильный для устройства, которое вы используете.

  • 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.

Вот пример из моего собственного проекта. Я вывожу html, точно так же:

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

Если используется устройство ldpi, я получаю изображение ldpi, используя hdpi или mdpi, и я получаю соответствующий для них. 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

Ответ 4

Из моих тестов путь "файл:///android_res/drawable/q1.png" работает только с 2.2+. Для 2.1, который дает ошибку файла, не найденную. Перемещение ресурса в активы будет работать, но это не реально, если вы хотите использовать доступные возможности (то есть вам понадобится копия изображения в каждой папке...).

Ответ 5

Ответы, связанные с файлом://URL-адреса могут больше не работать с Android 4.0. См. Ответ на этот вопрос. Способ, который будет работать, находится в ответе здесь.

Ответ 6

У меня есть одна и та же проблема, но я не помещаю файл изображения в res/drawable (который мне сначала нужно было создать, у меня были уже доступные draw-hdpi, -ldpi и -mdpi) или с помощью URL 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 - но он не появляется. Любые идеи?

Ответ 7

Вы загружаете чертежи, как в любом другом месте вашего кода... http://developer.android.com/guide/topics/resources/drawable-resource.html

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

также @MikeNereson, использующий Android, вы можете напрямую обращаться к необработанным файлам, расположенным в каталоге активов и SDCard.