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

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;
            }

        });

}

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

关于设置 WebViewClient 的说明:
1. 若没有设置 WebViewClient 则在点击链接之后由系统处理该 url,通常是使用浏览器打开或弹出浏览器选择对话框。
2. 若设置 WebViewClient 且shouldOverrideUrlLoading方法返回 true ,则说明由应用的代码处理该 url,WebView 不处理。(上面的代码中,返回之前让WebView处理了)
3. 若设置 WebViewClient 且shouldOverrideUrlLoading方法返回 false,则说明由 WebView 处理该 url,即用 WebView 加载该 url。

如果要实现点击网页里的链接,跳转到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

  • 2
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值