加载HTML文件到WebView

我有一个本地html页面以及其他几个资源指向它(css文件和Javascript库),我想加载到一个WebView。这是如何实现的呢?

也许不是最好的方法,但我仍在尝试。

204905 次浏览

最简单的方法可能是把你的web资源放到资产的文件夹中,然后调用:

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

Java和Webview的完全通信看到这个

更新:资产文件夹通常是以下文件夹: <project>/src/main/assets 这可以在<app>.iml文件中的资产文件夹配置设置中更改为:

< p > <option name=”ASSETS_FOLDER_RELATIVE_PATH” value=”/src/main/assets” /> 参见文章在哪里放置资产文件夹在Android工作室

在这种情况下,使用WebView#loadDataWithBaseUrl()WebView#loadUrl()更好!

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

url: url/path指向目录的字符串,所有JavaScript文件和html链接都有它们的起源。如果为null,则约为:空白。 data:包含您的hmtl文件的字符串,使用BufferedReader读取,例如

更多信息:WebView.loadDataWithBaseURL (. lang。字符串,. lang。字符串,. lang。字符串,. lang。字符串,以)

也许这个例子可以帮助:

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

“公认答案”对我没用,对我有用的是这个

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

确保您设置的文件路径准确。 Make sure you set File Path正确设置 < / p >

来自官方指南https://developer.android.com/develop/ui/views/layout/webapps/load-local-content:

  1. 将HTML作为资产存储在app/src/main/assets/
  2. 使用WebViewAssetLoader加载资产。在onCreate()中构造它,如下所示:
final WebViewAssetLoader assetLoader = new WebViewAssetLoader.Builder()
.addPathHandler("/assets/", new WebViewAssetLoader.AssetsPathHandler(this))
.addPathHandler("/res/", new WebViewAssetLoader.ResourcesPathHandler(this))
.build();
  1. 子类WebViewClient包装WebViewAssetLoader:
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以从资产加载web内容。

  1. 使用assetLoader from(2)构造WebViewClient from(3),并将其设置在你的WebView中。你的index.html可以通过使用https和默认域appassets.androidplatform.net来加载:
mWebView.setWebViewClient(new LocalContentWebViewClient(assetLoader));
mWebView.loadUrl("https://appassets.androidplatform.net/assets/index.html");

请注意,使用类似web的url而不是file://加载本地文件是可取的,因为它与同源策略兼容。