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

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

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


person klaus johan    schedule 21.04.2011    source источник
comment
для меня это сработало, если я уронил точку html -webView.loadUrl (file: /// android_asset / filename);   -  person quemeful    schedule 19.02.2015
comment
Есть ли причина, по которой вы не хотите принимать ответ @Jo?   -  person ClassA    schedule 15.09.2018


Ответы (5)


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

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

person Joe    schedule 21.04.2011
comment
Эта проблема действительно является FAQ. - person shihpeng; 22.04.2011
comment
Какие еще есть пути? - person klaus johan; 22.04.2011
comment
Вы, вероятно, также можете загрузить его в виде строки, если вы очень против использования ресурсов ... (см. stackoverflow.com/questions/4543349/load-local-html-in-webview) - person Joe; 22.04.2011
comment
Это должно быть отмечено как правильный ответ, потому что это действительно так. - person gorodechnyj; 21.11.2012
comment
Если путь к ресурсам когда-либо изменится, это сломается. - person SK9; 26.04.2013
comment
@ SK9 То же самое применимо, если какой-либо другой актив или ожидаемый файл отсутствует, например, если вы измените имя своего начального класса активности и не обновите AndroidManifest.xml, чтобы отразить это. (Лично я бы рекомендовал поместить URL-адрес / путь к файлу в строковых ресурсах и получить к нему доступ оттуда, чтобы путь был со всеми другими строковыми данными для программы, но на самом деле это не имеет прямого отношения к проблеме актива / зависимость от ресурсов.) - person JAB; 10.06.2013
comment
для меня это сработало, если я уронил точку html -webView.loadUrl (file: /// android_asset / filename); - person quemeful; 19.02.2015
comment
Для тех, кто не знает, как создать папку с активами, щелкните правой кнопкой мыши приложение- ›Создать-› Папка- ›Папка с активами и нажмите Готово. Android Studio создаст папку с активами по правильному пути. И вам просто нужно переместить свой html-файл в новую папку с ресурсами. Ссылка: http://stackoverflow.com/questions/18302603/where-to-place-assets-folder-in-android-studio - person Yuchao Zhou; 23.08.2016
comment
Да, это работает, но неправильно отображает неанглийские буквы. - person zygimantus; 18.09.2016
comment
У меня такая же проблема для ios, кто-нибудь сталкивался с этой проблемой? Если да, поделитесь своим решением, я пробовал другой способ доступа, но он бесполезен, я попробовал решение forum.qt.io/topic/47495/upload-ios-image-with-qt/11 - person Deepak Patel; 02.03.2018
comment
В Android Studio, похоже, больше нет параметра «Новая папка с активами». Обновлен ответ, чтобы указать правильный путь к файлу. Обратите внимание, что assets параллельно res по структуре папок. - person sunadorer; 18.04.2018

возможно, этот образец мог бы помочь:

  WebView lWebView = (WebView)findViewById(R.id.webView);
  File lFile = new File(Environment.getExternalStorageDirectory() + "<FOLDER_PATH_TO_FILE>/<FILE_NAME>");
  lWebView.loadUrl("file:///" + lFile.getAbsolutePath());
person Ajesh    schedule 19.05.2012
comment
в примере там, где HTML-код находится во внешней памяти, лучше всего, чтобы он был упакован в приложение - person Jonathan García; 23.09.2013
comment
file: /// важен при использовании HTML-файла из локального каталога устройства. Спасибо - person ralphgabb; 25.11.2019

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

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

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

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

person Khai Nguyen    schedule 15.01.2012
comment
Что такое переменная данные? Приведите пример. - person IgorGanapolsky; 02.11.2017

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

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

   webView.loadUrl("file:///android_asset/index.html");
person Jimale Abdi    schedule 02.05.2019
comment
Какая версия вашего мобильного телефона? - person Jimale Abdi; 10.05.2020

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");
    }
}

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

person Amanpreet Singh    schedule 09.04.2021