您的位置:首页 > 移动开发

Android webview里加载显示网页,显示进度,点击网页链接跳转到app页面

2017-06-06 11:43 1266 查看
1.怎么在webView里加载网页,并且让网页能正常滑动,缩放,可交互?

先写一个布局文件,如下,主要是包含一个WebView:

<?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"
android:background="@color/white">
<WebView
android:id="@+id/webview"
android:layout_width="match_parent"
android:layout_height="match_parent" >
</WebView>
</LinearLayout>


然后Activity的onCreate里调用如下代码:

setWebViewSettings();
setWebClient();
webview.loadUrl("http://www.XXX.com");//要加载的页面


setWebViewSettings()和setWebClient()分别定义如下:

private void setWebViewSettings() {
//获取一个webviewsetting对象
WebSettings setting = webview.getSettings();
//支持JavaScript
setting.setJavaScriptEnabled(true);
//显示缩放控制工具
setting.setDisplayZoomControls(true);
//设置webview支持缩放
setting.setSupportZoom(true);
setting.setBuiltInZoomControls(true);
//设置加载进来的页面自适应手机屏幕
setting.setUseWideViewPort(true);
setting.setLoadWithOverviewMode(true);
}


private void setWebClient() {

webview.setWebViewClient(new WebViewClient() {

public boolean shouldOverrideUrlLoading(WebView view, String url) {
// TODO Auto-generated method stub
view.loadUrl(url);
return true;
}

});

}


这样就实现了加载网页的功能,注意页面会全部加载后才会显示出来,所以页面内容太多的话,第一次显示会很慢。

如果要实现点击网页里的链接,跳转到app页面,怎么实现?

先准备一个带链接的html页面文件,内容如下:

<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
<a href="m://my.com/">go to app</a><br/>
<a href="m://my.commm/">don't go to app</a><br/>
</body>
</html>


文件中实现了两个链接,其中一个我们想点击后跳转到app页面,另一个不跳转。

然后把文件放到项目的main/assets/文件夹下。如果没有此文件夹可以自己新建。

然后改一下加载网页文件的代码:

String url = "file:///android_asset/test.html";
webview.loadUrl(url);


最后,重写上面提到的方法即可:

webview.setWebViewClient(new WebViewClient() {

public boolean shouldOverrideUrlLoading(WebView view, String url) {
Uri uri= Uri.parse(url);
if(uri.getScheme().equals("m")&&uri.getHost().equals("my.com")){
//这里是跳转到app的实现代码,和平时的实现一样就行
//XXX
}else{
view.loadUrl(url);
}
return true;
}

});


2.有时候网页比较大的话,加载很慢,这时候我们想在布局里加一个进度条,用于显示加载网页的进度,怎么做?

先在布局文件里加一个ProgressBar, 样式什么的自己设计,也可以用系统样式。

然后修改代码,findViewById之类的就不用说了,重要的是加上这个:

webview.setWebChromeClient(new WebChromeClient() {
@Override
public void onProgressChanged(WebView view, int newProgress) {
if(newProgress==100){
progressBar.setVisibility(View.GONE);//加载完网页进度条消失
}
else{
progressBar.setVisibility(View.VISIBLE);//开始加载网页时显示进度条
progressBar.setProgress(newProgress);//设置进度值
}

}
});


上面代码中的progressBar即为我们添加的进度条。

这样就可以在加载网页时显示进度了。

之前我们的代码里有个webview.setWebViewClient(),这次是webview.setWebChromeClient(),这两个方法有什么区别呢?可以参考前人的文章:

http://blog.csdn.net/linghu_java/article/details/6927439

3.如果当前处于webView所在页面,用户在按手机返回键时,想要返回上一个网页页面,而不是返回上一个Activity,怎么办?

像下面这样重写onKeyDown()方法即可:

@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
// TODO 自动生成的方法存根
if(keyCode== KeyEvent.KEYCODE_BACK) {
if(webview.canGoBack()) {//当webview不是处于第一页面时,返回上一个页面
webview.goBack();
return true;
}
else {//当webview处于第一页面时,直接退出程序
System.exit(0);
}

}
return super.onKeyDown(keyCode, event);
}


更多设置项,可参考前人总结:http://www.cnblogs.com/bluestorm/archive/2013/04/15/3021996.html
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息