Загрузить файл HTML в WebView

У меня есть локальная html-страница наряду с несколькими другими указанными на ней ресурсами (css-файлы и библиотеки Javascript), которые я хотел бы загрузить в WebView . Как этого достичь?

Возможно, не лучший способ продолжить, но я все еще экспериментирую.

6 ответов

Возможно, самым простым способом было бы поместить ваши веб-ресурсы в папку активов и затем вызвать:

webView.loadUrl("file:///android_asset/filename.html");

Для полной связи между Java и Webview см. Это

Обновление: папка ресурсов обычно является следующей папкой: <project>/src/main/assetsЭто можно изменить в настройках конфигурации папки ресурса в вашем <app>.imlфайл как:

<option name=”ASSETS_FOLDER_RELATIVE_PATH” value=”/src/main/assets” />Смотрите статью Где разместить папку активов в Android Studio

Вероятно, этот образец может помочь:

  WebView lWebView = (WebView)findViewById(R.id.webView);
  File lFile = new File(Environment.getExternalStorageDirectory() + "<FOLDER_PATH_TO_FILE>/<FILE_NAME>");
  lWebView.loadUrl("file:///" + lFile.getAbsolutePath());

В этом случае, используя WebView#loadDataWithBaseUrl() лучше, чем WebView#loadUrl()!

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

url: url / path Строка, указывающая на каталог, все ваши файлы JavaScript и ссылки html имеют свое происхождение. Если ноль, это о: пусто. data: строка, содержащая ваш файл hmtl, например, с помощью BufferedReader

Дополнительная информация: WebView.loadDataWithBaseURL (java.lang.String, java.lang.String, java.lang.String, java.lang.String, java.lang.String)

Принятый ответ не работает для меня, это то, что работает для меня

WebSettings webSetting = webView.getSettings();
    webSetting.setBuiltInZoomControls(true);
    webView1.setWebViewClient(new WebViewClient());

   webView.loadUrl("file:///android_asset/index.html");

XML-файл макета:

      <WebView android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:id="@+id/webView"
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    tools:context=".activities.Bani9">
</WebView>

Java-код:

      public class Bani9 extends AppCompatActivity {
    WebView webView;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_bani9);
        webView = findViewById(R.id.webView);
        WebSettings webSetting = webView.getSettings();
        webSetting.setBuiltInZoomControls(true);
        webView.setWebViewClient(new WebViewClient());

        webView.loadUrl("file:///android_asset/punjabi/bani9.html");
    }
}

Убедитесь, что вы правильно указали путь к файлу.

Из официального руководства https://developer.android.com/develop/ui/views/layout/webapps/load-local-content :

  1. Сохраните HTML как актив вapp/src/main/assets/
  2. Использоватьдля загрузки актива. Постройте его в своемonCreate()следующее:
      final WebViewAssetLoader assetLoader = new WebViewAssetLoader.Builder()
         .addPathHandler("/assets/", new WebViewAssetLoader.AssetsPathHandler(this))
         .addPathHandler("/res/", new WebViewAssetLoader.ResourcesPathHandler(this))
         .build();
  1. Подклассобернуть :
      private static class LocalContentWebViewClient extends WebViewClientCompat {

    private final WebViewAssetLoader mAssetLoader;

    LocalContentWebViewClient(WebViewAssetLoader assetLoader) {
        mAssetLoader = assetLoader;
    }

    @Override
    @RequiresApi(21)
    public WebResourceResponse shouldInterceptRequest(WebView view,
                                     WebResourceRequest request) {
        return mAssetLoader.shouldInterceptRequest(request.getUrl());
    }

    @Override
    @SuppressWarnings("deprecation") // to support API < 21
    public WebResourceResponse shouldInterceptRequest(WebView view,
                                     String url) {
        return mAssetLoader.shouldInterceptRequest(Uri.parse(url));
    }
}

Это в основном передает URL-адрес запроса вWebViewAssetLoaderдля загрузки веб-контента из ресурса.

  1. ИспользоватьassetLoaderиз (2) построитьWebViewClientиз (3) и установите его в свойWebView. Твойindex.htmlможет быть загружен с использованием https и домена по умолчаниюappassets.androidplatform.net:
      mWebView.setWebViewClient(new LocalContentWebViewClient(assetLoader));
mWebView.loadUrl("https://appassets.androidplatform.net/assets/index.html");

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

Другие вопросы по тегам