Отображение файлов активов Android в WebView? - PullRequest
23 голосов
/ 16 марта 2011

Я видел различные дискуссии по проблеме обслуживания страниц WebView из ресурсов, ни один из которых не казался окончательным.

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

Я обнаружил, что wv.loadUrl ("file: ///android_asset/html_no_copy/demo_welcome.html") отображает этот файл, но ссылки в файле demo_welcome.html локальные (без URLпрефикс имени файла) или абсолютный - той же формы, что и в loadUrl - не работают.Они получают сообщение об ошибке «Веб-страница недоступна».

WebView wv = (WebView)this.findViewById(R.id.splashWebView);
wv.loadUrl("file:///android_asset/html_no_copy/test.html"); // Works

или

wv.loadUrl("file:///android_asset/html_no_copy/demo_welcome.html"); // Works

Но ни одна из следующих ссылок в demo_welcome.html не работает:

<a href="test.html">CLICK HERE</a><p>
<a href="file:///android_asset/html_no_copy/test.html">OR HERE</a>

Я знаю, что могу обойти это, написав контент-провайдер, но это кажется крайним.

Я хочу, чтобы это работало с SDK 1.6 (4) и выше.

Кто-нибудь знает, можно ли это сделать только с помощью HTML, или нужно загружать некоторый код для загрузки данных?

Ответы [ 2 ]

28 голосов
/ 16 марта 2011

Ну, я нашел что-то, что, кажется, работает (на 1.6 и 2.2), несмотря на предупреждение, что это будет повторяться.

Я также обнаружил, что ссылки на таблицы стилей CSS внутри первой и второй страниц работают без следующего перехвата. Странно, и это заставляет меня немного нервничать. Мысли

Вот код:

WebView wv = (WebView)this.findViewById(R.id.splashWebView);
wv.setWebViewClient(new WebViewClient() {  
  @Override  
  public boolean shouldOverrideUrlLoading(WebView view, String url)  
  {  
    view.loadUrl(url);
    return true;
  }  
}); 
wv.loadUrl("file:///android_asset/html_no_copy/demo_welcome.html");

Вот содержимое файла:

demo_welcome.html:

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
  <head>
    <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
    <title>Demo Html</title>
    <link rel="stylesheet" type="text/css" href="demo.css" />
  </head>
  <body>
    <H1>Testing One Two Three</H1>
    <a href="test.html">CLICK HERE</a><p>
    <a href="file:///android_asset/html_no_copy/test.html">OR HERE</a>
  </body>
</html>

test.html:

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
  <head>
    <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
    <link rel="stylesheet" type="text/css" href="test.css" />
    <title>Insert title here</title>
  </head>
  <body>
    <H1>TEST.HTML</H1>
  </body>
</html>
8 голосов
/ 08 июля 2011

вместо loadUrl, попробуйте использовать метод loadDataWithBaseURL:

wv.loadDataWithBaseURL("fake://not/needed", html, mimeType, encoding, "");
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...