在一个大的Android项目中,由于客户端来不及更新和实现,经常会内嵌一些网页(在一些大型的互联网公司,PC的产品总是跑在客户端的前面),比如活动页面,通常可以内嵌用html5实现的页面,可以适配手机。但是这些网页中有好多链接,但是这些链接有些内容有是我们客户端已经实现的,比如有一个注册链接,其实客户端也实现了注册功能,我们不想再继续跳转到网页注册,而是打开客户端某个注册Activity,可以通过以下方式来实现:
html文件
将html文件放在assets文件夹下(也可以放在服务端,只需要修改java文件要加载的url即可),在网页中可以使用href也可以使用onClick实现链接。
<!doctype html>
<html>
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width,initial-scale=1.0,user-scalable=no,maximum-scale=1.0"><!--这是手机头部声明-->
<title>Text页面</title>
</head>
<body>
<nav>
<ul class="nav">
<li>
<a href="http://baidu.com" title="第一项">我是第一项</a>
</li>
<li>
<a href="#" title="第二项">我是第二项</a>
</li>
</ul>
</nav>
</body>
</html>
xml 布局文件
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
<WebView
android:id="@+id/wv_lorry"
android:layout_width="match_parent"
android:layout_height="match_parent"/>
</LinearLayout>
java代码
在android中,拦截你感兴趣的链接,然后做自己的处理。
public class MagicBoxActivity extends AppCompatActivity {
private static String TAG = "Chunna==MagicBox";
private WebView wvLorry;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_magic_box);
wvLorry = (WebView)findViewById(R.id.wv_lorry);
wvLorry.loadUrl("file:///android_asset/text.html");//加载assets文件夹下网页
wvLorry.setWebViewClient(new MyWebViewClient());
}
// 监听所有点击的链接,如果拦截到我们需要的,就跳转到相对应的页面。
private class MyWebViewClient extends WebViewClient {
@Override
public boolean shouldOverrideUrlLoading(WebView view, String url) {
Log.d(TAG,"拦截到网页的点击事件url = "+url);
if (url != null && url.contains("baidu.com")) {
Log.d(TAG,"拦截到需要的URL");
//实现我们自己的处理,例如跳转到另一个Activity
return true;
}
return super.shouldOverrideUrlLoading(view, url);
}
@Override
public void onPageFinished(WebView view, String url) {
view.getSettings().setJavaScriptEnabled(true);
super.onPageFinished(view, url);
}
}
}