如何监听WebView显示事件
2015-09-01 19:06
453 查看
我们都知道,在WebView的应用中,可以使用WebViewClient监听WebView的内容【加载】事件,比如onPageFinished、onPageStarted等。但是即使onPageFinished触发时,WebView的内容也并未显示。当我们想要监听WebView的内容显示事件的时候怎么办呢?
我先是找到了网上有答案说用
于是必须用新的方法。还有人建议用重写WebView中的
需要注意的是,onDraw方法在绘制过程中会被多次调用,每次调用时,WebView中绘制出的内容的高度可能是不同的。如果只判断getContentHeight() > 0,高度很小时,可能仍然得不到理想效果。可以通过判断getContentHeight()大于某个给定值来确定效果。
我先是找到了网上有答案说用
PictureListener,然后重写onNewPicture方法(链接在此)。但是官方文档写的很清楚,这个类已经废弃了(链接在此)。
于是必须用新的方法。还有人建议用重写WebView中的
invalidate()方法,然后在其中判断
getContentHeight() > 0以确定内容已经显示出来了(链接在此)。这个方法与重写onDraw()方法是类似的。需要在WebView中定义一个监听接口,比如OnLoadFinishListener,在使用时重写其onLoadFinish()方法就可以了。例如:
public class ArticleWebView extends WebView{ private OnLoadFinishListener mOnLoadFinishListener; public interface OnLoadFinishListener{ public void onLoadFinish(); } private boolean isRendered = false; public ArticleWebView(Context context) { super(context); init(); } public ArticleWebView(Context context, AttributeSet attrs) { super(context, attrs); init(); } public ArticleWebView(Context context, AttributeSet attrs, int defStyleAttr) { super(context, attrs, defStyleAttr); init(); } private void init(){ } @Override protected void onDraw(Canvas canvas) { super.onDraw(canvas); if(!isRendered){ DebugLog.log("ArticleWebView", "getContentHeight():"+getContentHeight()); isRendered = getContentHeight() > 0; if(mOnLoadFinishListener!= null){ mOnLoadFinishListener.onLoadFinish(); } } } public void setOnLoadFinishListener(OnLoadFinishListener onLoadFinishListener){ this.mOnLoadFinishListener = onLoadFinishListener; } }
需要注意的是,onDraw方法在绘制过程中会被多次调用,每次调用时,WebView中绘制出的内容的高度可能是不同的。如果只判断getContentHeight() > 0,高度很小时,可能仍然得不到理想效果。可以通过判断getContentHeight()大于某个给定值来确定效果。
相关文章推荐
- ios js oc相互调用(截获url的方式)(三)
- Android 打造炫目的圆形菜单 秒秒钟高仿建行圆形菜单
- jQuery手机端上拉刷新下拉加载更多页面
- 配置学习总结高通平台GPIO
- Objective-C( Foundation框架 一 数组(NSMutableArray))
- 存储过程Append 二进制 _ParameterPtr“不正常地定义参数对象。提供了不一致或不完整的信息”
- Appium 自动化用例设计 (Excel 配置篇)
- android 优化策略
- iOS: UIWebView 中不加载图片(即浏览器常见的无图模式)
- EAIntroView–高度可定制的iOS应用欢迎页通用解决方案
- unity3d 2d 射线检测
- iOS中init和initialize的特点
- EAIntroView–高度可定制的iOS应用欢迎页通用解决方案
- Android开发技巧——PagerAdapter再简单的包
- Android 高仿微信头像截取 打造不一样的自定义控件
- cocos2dlua-声音
- Java -Android 得知(第四天)
- android折线图的应用
- cocos2dlua-动画
- ios9 SFSafariViewController完整web体验