android webview 注意事项

webview是android中的浏览器控件,在一些手机应用中常会用到b/s模式去开发应用,这时webview的强大功能就会显示出来。 
 1、webview的几点设置 
  
 权限设置:.AndroidManifest.xml中必须使用许可"android.permission.INTERNET",否则会出Web page not available错误 
 js开放设置: 如果访问的页面中有Javascript,则webview必须设置支持Javascript。webview.getSettings().setJavaScriptEnabled(true);  否则,页面的js将不会起作用. 
滚动条设置:this.setScrollBarStyle(SCROLLBARS_OUTSIDE_OVERLAY); 
设置缓存模式:setCacheMode 

要注意的是,其中的webView的一系列用法,比如 webView.getSettings().setJavaScriptEnabled(true);设置可以使用javscript; 

 

webView.getSettings().setJavaScriptEnabled(true);    

webView.setScrollBarStyle(WebView.SCROLLBARS_OUTSIDE_OVERLAY);    
webView.setHorizontalScrollBarEnabled(false);    
webView.getSettings().setSupportZoom(true);    
webView.getSettings().setBuiltInZoomControls(true);    
webView.setInitialScale(70);    
webView.setHorizontalScrollbarOverlay(true); 


2、在WebView的设计中,WebView主要完成解析、渲染界面。其他交给 
(1)、事件监听对象(WebViewClient) 处理各种通知、请求事件的,具体来说包括: 
事件监听对象WebViewClient中,主要有如下几个常用方法: 
shouldOverrideUrlLoading:在web页面里单击链接的时候,会自动调用android自带的浏览器来打开链接,需要通过该方法在本页面打开; 
@Override 
    public boolean shouldOverrideUrlLoading(WebView view, String url) { 
        view.loadUrl(url); 
        return true; 
    } 


onLoadResource:加载资源时响应 
onPageStart:在加载页面时响应 
onPageFinish:在加载页面结束时响应 
onReceiveError:在加载出错时响应 
onReceivedHttpAuthRequest: 


(2)、WebChromeClient是辅助WebView处理Javascript的对话框,网站图标,网站title,加载进度等  
 onCloseWindow(关闭WebView)  
 onCreateWindow()  
 onJsAlert (WebView上alert是弹不出来东西的,需要定制你的WebChromeClient处理弹出)  
 onJsPrompt  
 onJsConfirm  
 onProgressChanged  
 onReceivedIcon  
 onReceivedTitle 
3、返回处理 
如果不做任何处理,浏览网页,点击系统“Back”键,整个Browser会调用finish()而结束自身,如果希望浏览的网 页回退而不是推出浏览器,需要在当前Activity中处理并消费掉该Back事件。 
public boolean onKeyDown(int keyCode, KeyEvent event) {         
        if ((keyCode == KeyEvent.KEYCODE_BACK) && mWebView.canGoBack()) {         
            mWebView.goBack();         
                   return true;         
        }         
        return super.onKeyDown(keyCode, event);         
    } 


4、支持javascripte自定义对象 
可以通过addJavascriptInterface()方法,添加js自定义对象,使用web页面与手机java程序能够进行通信交互。 
5、DownloadListener接口 
该接口里面有一个方法,onDownloadStart()下载侦听接口,如果客户代码实现该接口,则在下载开始、失败、挂起、完成等情况下,DownloadManagerCore对象会调用客户代码中实现的DownloadListener方法。 
6、几个注意点 
1)为了让WebView从apk文件中加载assets,Android SDK提供了一个schema,前缀为"file:///android_asset/"。WebView遇到这样的schema,就去当前包中的 assets目录中找内容。如上面的"file:///android_asset/demo.html"  

2)addJavascriptInterface方法中要绑定的Java对象及方法要运行另外的线程中,不能运行在构造他的线程中,这也是使用 Handler的目的(今天我是在没有在handler中处理,所以导致webviewclient中的onPageStart方法与addJavascriptInterface中的方法起了冲突,二个人的执行顺序时常互换,之后改成handlder实现,就解决其中的问题,正确的顺序是onPageStart在addJavascriptInterface中的handlder事件处理之前执行)。

原文地址:

http://www.haogongju.net/art/2273208



二、WebViewClient的方法说明

1、public boolean shouldOverrideUrlLoading(WebView view, String url) { 
       view.loadUrl(url);
       return true;
  }
   在点击请求的是链接是才会调用,重写此方法返回true表明点击网页里面的链接还是在当前的webview里跳转,不跳到浏览器那边。
2、public void onReceivedSslError(WebView view, SslErrorHandler handler, android.net.http.SslError error) {
handler.proceed();
}
重写此方法可以让webview处理https请求。
3、public boolean shouldOverrideKeyEvent(WebView view, KeyEvent event) {
            return super.shouldOverrideKeyEvent(view, event);
        }
    }
重写此方法才能够处理在浏览器中的按键事件。
4、 public void onLoadResource(WebView view, String url) {
            // TODO Auto-generated method stub
            if (DEBUG) {
                Log.d(TAG, " onLoadResource ");
            }
            super.onLoadResource(view, url);
        }
在加载页面资源时会调用,每一个资源(比如图片)的加载都会调用一次。
5、 public void onPageStarted(WebView view, String url, Bitmap favicon) {
            // TODO Auto-generated method stub
            if (DEBUG) {
                Log.d(TAG, " onPageStarted ");
            }
           if (url.endsWith(".apk")) {
                    download(url);// 下载 处理
             }
            super.onPageStarted(view, url, favicon);
        }
在页面加载开始时调用。
6、public void onPageFinished(WebView view, String url) {
            // TODO Auto-generated method stub
            if (DEBUG) {
                Log.d(TAG, " onPageFinished ");
            }
            super.onPageFinished(view, url);
        }
在页面加载结束时调用。
原文地址:

http://blog.csdn.net/jackyhuangch/article/details/8310033

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值