最近做一个项目,使用android webview 加载html5来 实现的,现在遇到一个问题,是关于webview 加载的html 5与 activity的跳转。
我这里用注册这个功能来解释一下这个问题.
android端webview 命名:andWebview 填写注册信息页面:andregister
Html端 点击注册的页面 htmlbutton 登录页面:htmllogin
andWebview 加载 htmlbutton
点击htmlbutton页面的button按钮以后跳转到android的布局andregister的注册页面填写信息。注册成功以后我需要跳转到htmllogin登录页面,并且htmllogin是在andWebview 中加载的。 这里的htmllogin页面和htmlbutton页面是在同一个andWebview中加载的。
希望做过这方面的朋友 可以详细的回答一下 或者也可以提供一个demo给我 与君共勉。
------解决思路----------------------
理解貌似需求是这样的。
那么如何让html和Activity进行交互呢?
关于html和Activity交互,我尝试了两种方法:
第一种:JS 调用来实现HTMl页面和Activity交互
第二种:通过WebView.setWebViewClient() 利用这个方法来监控点击的URL。
先看下做的效果图吧!
思路:
第一种方案:
js和Activity进行交互,Android的WebView中有这么一个方法:
通过这个方法我们可以设置给html页面的js提供一个方法的接口。
活动中核心代码:
webView = (WebView) this.findViewById(R.id.webView);
WebSettings setting = webView.getSettings();
// 设置支持javascript
setting.setJavaScriptEnabled(true);
// 增加接口方法,让html页面调用
webView.addJavascriptInterface(new Object() {
// 这里我定义了一个拨打的方法
public void startPhone(String num) {
Intent intent = new Intent();
intent.setAction(Intent.ACTION_CALL);
intent.setData(Uri.parse("tel:" + num));
startActivity(intent);
}
}, "demo");
// 加载页面
webView.loadUrl("http://10.1.26.64/demo/test.html");
html页面调用核心代码:
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
<script type="text/javascript">
function show(content){
document.getElementById("countent").innerHTML=
"这是我的javascript调用. 这是:"+content;
}
</script>
</head>
<body>
<table align="center">
<tr><td>拨号功能,点击进行拨号</td><td><a href="javascript:demo.startPhone(10086)">10086</a></td></tr>
<tr><td>这个超链接是百度网址,点击跳转活动</td><td><a href="https://www.baidu.com" >baidu</a></td></tr>
</table>
<p id="countent">html原来内容,点击按钮我会变哦</p>
</body>
</html>
第二种方案:
WebView.setWebViewClient();这种方法比较简单,也简单说下吧。
看到这个问题的时候,我想了下,发现在这个方法中需要重写这个东东:
public boolean shouldOverrideUrlLoading(WebView view, String url) ;
这个方法相信很多人都知道这个本来最常用的方法是用来防止加载URL时调用其他浏览器,
然而我却发现,如果在这里利用WebView的这个监听URL的方法,那么便可以实现html和Activity之间的跳转。
核心代码如下:
//设置WebView监听事件, 监听URL
webView.setWebViewClient(new WebViewClient() {
@Override
public boolean shouldOverrideUrlLoading(WebView view, String url) {
// TODO Auto-generated method stub
//如果是打开的是百度URL,则进行跳转Activity
if (url.trim().equals("https://www.baidu.com/")) {
//活动跳转的方法
JumpActvity();
}else{
view.loadUrl(url);
}
return true;
}
demo下载地址:http://pan.baidu.com/s/1c0ntM5U 密码:k1et
说明:
1.导入工程请注意,清单文件中我设置的最低版本10,目标版本23 根据自己情况进行修改。
2.test.html文件,我使用的是xampp部署的,自己也可以选择其他web服务器
xampp 中文官网: http://www.xampps.com/
3.请确保测试手机可以联网,由于加载的url进行连接,反应会有点慢。请注意。
------解决思路----------------------
思路很简单:
你只不过是想用同一个WebView去加载两个不同的HTML,所以需要处理的就只是什么时候加载那个HTML页面这个问题了。
WebView只是一个控件,说到底,还是加载在Activity中。看下面的代码:
package com.example.androiddemo;
import android.app.Activity;
import android.os.Bundle;
import android.view.Window;
import android.webkit.WebSettings;
import android.webkit.WebView;
/**
* WebView只是一个控件,说到底,它还是在Activity中,所以只需简单的理解为两个Activity之间的跳转,
* Activity都会保持在栈中,所以,只需在Activity重新调用(也就是onResume()方法)时作相应的处理就行了。
* @author luosiye
*/
public class AndroidWebView extends Activity{
final static int CLICK = 0x00000F;
final static int LOGIN = 0x00000E;
private final String clickUrl = "file:///android_asset/click.html";
private final String loginUrl = "file:///android_asset/login.html";
public static int loadIndex = CLICK;
private WebView mWebView;
private WebSettings webSettings;
@Override
protected void onCreate(Bundle savedInstanceState) {
requestWindowFeature(Window.FEATURE_NO_TITLE);
super.onCreate(savedInstanceState);
setContentView(R.layout.web_layout);
loadIndex = CLICK;
webViewInit();
}
private void webViewInit(){
mWebView = (WebView)findViewById(R.id.web_view);
webSettings = mWebView.getSettings();
webSettings.setJavaScriptEnabled(true);
webSettings.setSupportZoom(false);
webSettings.setBuiltInZoomControls(false);
mWebView.clearCache(true);
}
@Override
protected void onResume() {
super.onResume();
//loadIndex的赋值也可以放在htmlbutton的点击时间中。
if(loadIndex == CLICK){
mWebView.loadUrl(clickUrl);
}else if(loadIndex == LOGIN){
mWebView.loadUrl(loginUrl);
}
}
@Override
protected void onPause() {
super.onPause();
loadIndex = CLICK;
}
@Override
protected void onStop() {
super.onStop();
loadIndex = LOGIN;
}
@Override
protected void onDestroy() {
super.onDestroy();
loadIndex = LOGIN;
}
}