[英]How to link html files in WebView?
我有一个巨大的htm文件文件夹和一个HTML文件,其中的href链接到每个htm文件。 我想创建一个供个人使用的android应用程序,以使在平板电脑上浏览这些文件更加轻松。
我设法将主要html文件加载到Android Studio中的WebView,但是单击任何URL都会导致崩溃,因此我无法通过html目录加载任何htm文件。
我在android编程方面没有经验,从html和一些css就足够了,所以我在网站创建方面只有一些过时的经验,所以我尝试运用自己的直觉。 我可能遗漏了一些非常明显的东西,但是我没有设法解决我的问题。
也许您可以帮助我? 是否可以通过WebView中的href在html文件之间重定向? 还是有一种简单的方法可以绕过它? 不幸的是,从头开始编码目录是毫无疑问的-有成千上万个htm文件。 欢迎任何建议。
编辑:我的代码如下:
MainActivity.java
package a.my.app4;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.webkit.WebView;
import java.nio.channels.WritableByteChannel;
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
WebView webz=(WebView)findViewById(R.id.web1);
webz.loadUrl("file:///android_asset/index.html");
}
}
activity_main.xml
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivity">
<WebView
android:id="@+id/web1"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_alignParentBottom="true"
android:layout_centerHorizontal="true"
android:layout_marginBottom="0dp" />
</RelativeLayout>
index.html只是正文部分中href链接的巨大列表。 即使将css文件中的简单格式正确也可以正确地将其加载到WebView,但是单击链接会导致崩溃。 有成千上万行这样的代码:
<a href="view-1.htm" title="file description">file title</a>
我也尝试过以这种方式更改它(这可能会影响成千上万行...),但是它也不起作用:
<a href="file:///android_asset/view-1.htm" title="file description">file title</a>
所有文件都在资产文件夹中。
您需要设置StrictMode策略才能公开URI(在您的情况下为view-1.html
)。 您可以达到以下预期效果:
MainActivity.java
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
StrictMode.VmPolicy.Builder builder = new StrictMode.VmPolicy.Builder();
StrictMode.setVmPolicy(builder.build());
WebView webView = findViewById(R.id.wvWebView);
webView.getSettings().setJavaScriptEnabled(true);
webView.loadUrl("file:///android_asset/index.html");
}
index.html
<html>
<body>
<H1>Hello</H1>
<a href="view1.html" title="file description">file title</a>
</body>
</html>
view1.html
<html>
<body>
<H1>Hello View 1</H1>
</body>
</html>
对于以后遇到相同问题的任何人,我都通过在java文件中添加一行来解决了这一问题。 确实,我确实缺少一些明显的东西。 我还添加了代码部分来确定后退按钮的行为。
MainActivity.java现在如下所示:
package a.my.app4;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.webkit.WebView;
import java.nio.channels.WritableByteChannel;
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
WebView webz=(WebView)findViewById(R.id.web1);
webz.loadUrl("file:///android_asset/index.html");
webz.setWebViewClient(new WebViewClient());
}
@Override
public void onBackPressed() {
WebView webz = (WebView) findViewById(R.id.web1);
if (webz.canGoBack()) {
webz.goBack();
} else {
super.onBackPressed();
}
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.