如何监听WebView显示事件

        我们都知道,在WebView的应用中,可以使用WebViewClient监听WebView的内容【加载】事件,比如onPageFinished、onPageStarted等。但是即使onPageFinished触发时,WebView的内容也并未显示。当我们想要监听WebView的内容显示事件的时候怎么办呢?

        我先是找到了网上有答案说用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()大于某个给定值来确定效果。

转载于:https://www.cnblogs.com/noodleutopia/p/4776620.html

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值