5月 192016
 

最近解决的问题比较多,整理一下,方便后续自己查。
先送上我看过的几篇不错的文章:
传送门1:Android WebView常见问题及解决方案汇总
传送门2:浅谈WebView的使用
传送门3:WebView Cache 缓存清除
传送门4:Android WebView 因重定向无法正常goBack()解决方案
传送门5:Android高手进阶教程(二十三)之—Android中的日历读写操作!!!     Android 向系统日历中添加事件
自己遇到的一些问题:

  1.  如何判断webview 已经完成load操作?
    1. 目前未找到合理的方式,webview的WebViewClient中有一个onPageFinished方法,但这个方法的行为很诡异,若访问的是一个正常、有效的站点,webview在load完页面后onPageFinished仅被调用一次;但如果站点无效、不可用(HTTP response的状态码不是200),onPageFinished可能调用两次或是多次(stackoverflow上有很多帖子讨论这问题,如下:http://stackoverflow.com/questions/7670364/onpagestart-called-many-times-and-onpagefinished-not-called-for-single-page  http://stackoverflow.com/questions/18282892/android-webview-onpagefinished-called-twice    http://stackoverflow.com/questions/5049616/android-webviewclient-callbacks-called-too-often ,唉……接口设计不合理啊),因此不建议在此处加上load完毕时需要调用的回调。
    2. WebChromeClient中有一个onProgressChanged方法,传入参数中有一个int值表示当前页面载入百分比,但亲测也不好用,传入的int值并不稳定,有时的从0,15一下就到了90,有时只传0,20等,并且我记得当时测试的时候请求无效站点时int值也比较奇怪,记不清了。
    3. 网上有种写法,覆盖loadUrl,使用HttpClient自己进行网络请求的收发操作,拿到返回报文后使用webview的loadData方法载入页面,但若一个页面中有很多资源需要在载入时下载,那就需要在拿到返回报文后进一步处理,否则页面显示肯定不正常(比如css文件没下载、js文件没下等)
  2.  PopupWindow显示后,立即调用软键盘,软键盘不显示
    1. 是否在UI线程?
    2. 可能需要延时?若PopupWindow内部的内容是新创建的,可能需要延时几百毫秒、等内容(所有的View)全部创建后再调用ImputManager的showSoftInput方法,可以尝试用timer或是handler加上延时、等待
    3. PopupWindow弹出后其他地方变暗的效果
      1. //设置背景颜色变暗
        WindowManager.LayoutParams lp=getWindow().getAttributes();
        lp.alpha=0.3f;
        getWindow().setAttributes(lp);  //在弹出时设置透明度,0.7比较合适,然后在dismiss时重新设置回来,设置成1
  3. webview控件访问https站点,直接显示错误或是空白页
    1. https站点是否部署了有效的证书?如果没有就会报错,若需要尽快测试可以在webview中配置信任所有站点,需要设置新的WebViewClient,覆盖其中的onReceivedSslError方法,如下:

 

public void onReceivedSslError(WebView dview, SslErrorHandler handler, SslError error){
handler.procced();
}

 
 
TO BE CONTINUED…


 Leave a Reply

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>

(required)

(required)