我在assets文件夹中有HTML文件,并尝试在android webview中加载它。 css样式没有得到应用,javascript也没有得到应用,图像也没有被加载。 这是活动代码:
public class MainActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
WebView ctWebView = (WebView) findViewById(R.id.ctWebview);
ctWebView.getSettings().setDomStorageEnabled(true);
ctWebView.getSettings().setJavaScriptEnabled(true);
ctWebView.setLayerType(View.LAYER_TYPE_SOFTWARE, null);
ctWebView.setWebChromeClient(new WebChromeClient());
ctWebView.setWebViewClient(new WebViewClient() {
@Override
public boolean shouldOverrideUrlLoading(WebView view, String url) {
view.loadUrl(url);
return true;
}
@Override
public void onLoadResource(WebView view, String url) {
super.onLoadResource(view, url);
Log.e("resource",url);
}
});
ctWebView.loadUrl("file:///android_asset/creditrackerhtml.html");
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.menu_main, menu);
return true;
}
}
这是布局文件:
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
android:paddingBottom="@dimen/activity_vertical_margin"
tools:context=".MainActivity">
<WebView android:layout_width="match_parent" android:layout_height="match_parent" android:id="@+id/ctWebview"></WebView>
</RelativeLayout>
HTML文件太大而无法在此处粘贴,但我已将日志放在public void onLoadResource(WebView视图,String url)中,并且已经看到正在点击正确的资源URL。 在下载资源之前是否正在加载webview?不知道如何解决这个问题
答案 0 :(得分:0)
将您的文件放在资源文件夹中。
转到项目&gt; app&gt; src&gt;主要&gt;右键单击&gt;新&gt;文件夹&gt;资产文件夹。将其命名为资产。
要访问文件,请使用getAssets()。open(filename.txt)
使文件到URL使用file.toURI()或file.toURI()。toURL()。
此外,您不需要太多加载网址。只需使用webView.loadUrl(url);
如果您有链接,请使用:
//So links stay inside webview
webview.setWebViewClient(new WebViewClient());
webview.setOnKeyListener(new View.OnKeyListener() {
@Override
public boolean onKey(View v, int keyCode, KeyEvent event) {
if (event.getAction() == KeyEvent.ACTION_DOWN) {
WebView webView = (WebView) v;
switch (keyCode) {
case KeyEvent.KEYCODE_BACK:
if (webView.canGoBack()) {
webView.goBack();
return true;
}
break;
}
}
return false;
}
});
答案 1 :(得分:0)
您是否尝试过loadDataWithBaseURL()
?
webView.loadDataWithBaseURL(url,
data,
"text/html",
"utf-8",
null);
loadDataWithBaseURL() 使用baseUrl作为基本URL将给定数据加载到此WebView中 对于内容。基本URL用于解析相对URL 并且在应用JavaScript的相同原始策略时。 historyUrl是 用于历史记录。
答案 2 :(得分:0)
HTML中的CSS和图像应使用相对于资产目录的URL或使用网络上的绝对路径。