Ответ 1
Это работало в android 2.2
<img src = "file:///android_res/drawable/q1.png" />
где q1.png находится в папке res/drawable-hdpi
Я бросаю 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
?
Это работало в android 2.2
<img src = "file:///android_res/drawable/q1.png" />
где q1.png находится в папке res/drawable-hdpi
Я признаю, что я мало что знаю о 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"/>
Это работает для вас?
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
Из моих тестов путь "файл:///android_res/drawable/q1.png" работает только с 2.2+. Для 2.1, который дает ошибку файла, не найденную. Перемещение ресурса в активы будет работать, но это не реально, если вы хотите использовать доступные возможности (то есть вам понадобится копия изображения в каждой папке...).
Ответы, связанные с файлом://URL-адреса могут больше не работать с Android 4.0. См. Ответ на этот вопрос. Способ, который будет работать, находится в ответе здесь.
У меня есть одна и та же проблема, но я не помещаю файл изображения в 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 - но он не появляется. Любые идеи?
Вы загружаете чертежи, как в любом другом месте вашего кода... http://developer.android.com/guide/topics/resources/drawable-resource.html
Resources res = getResources();
Drawable drawable = res.getDrawable(R.drawable.myimage);
также @MikeNereson, использующий Android, вы можете напрямую обращаться к необработанным файлам, расположенным в каталоге активов и SDCard.