咱们都知道,在WebView的应用中,可使用WebViewClient监听WebView的内容【加载】事件,好比onPageFinished、onPageStarted等。可是即便onPageFinished触发时,WebView的内容也并未显示。当咱们想要监听WebView的内容显示事件的时候怎么办呢?html
我先是找到了网上有答案说用PictureListener,而后重写
javaonNewPicture
方法(连接在此)。可是官方文档写的很清楚,这个类已经废弃了(连接在此)。
因而必须用新的方法。还有人建议用重写WebView中的invalidate()
方法,而后在其中判断getContentHeight() > 0
以肯定内容已经显示出来了(连接在此)。这个方法与重写onDraw()方法是相似的。须要在WebView中定义一个监听接口,好比OnLoadFinishListener,在使用时重写其onLoadFinish()方法就能够了。例如:android
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()大于某个给定值来肯定效果。web