如何检测setTextZoom()何时在webview中完成加载?

时间:2018-02-17 23:35:35

标签: android webview

我使用setTextZoom()在webview中使html文件的文本更大或更小。

private void makeTextBigger() {
    WebSettings settings = webview.getSettings();
    settings.setTextZoom(settings.getTextZoom() + 10);
}

它适用于较小的文件,但是当文件很大时,需要几秒钟才能看到更改。这几秒钟的延迟看到变化让用户认为zoomIn运行不正常!所以我想检测setTextZoom()何时完成其工作,以便我可以在那时显示进度条。

我尝试WebViewClient作为以下代码,但它什么也没做。

webview.setWebViewClient(new WebViewClient(){
        public void onPageStarted(WebView wv, String url, Bitmap favicon){
            show_WebviewLoadingProgressBar();
        }

        public void onPageFinished(WebView wv, String thisUrl){
            hide_WebviewLoadingProgressBar();
        }
    });

任何帮助将不胜感激。

1 个答案:

答案 0 :(得分:0)

最后我找到了一种方法来做到这一点:)(我是编程的新手。如果我错了,请纠正我。)

我声明了三个成员变量:

private long pageLoading_StartTime = 0;
private long pageLoadingTime = 0;
private static final long loadingTimeThreshold = 500; // in millisecond

然后对于每个网页加载,我记录加载时间,如下所示:

webview.setWebViewClient(new WebViewClient(){

        public void onPageStarted(WebView wv, String url, Bitmap favicon){
            pageLoading_StartTime = new Date(System.currentTimeMillis()).getTime(); //reset pageLoading time
            pageLoadingTime = 0;
        }

        public void onPageFinished(WebView wv, String thisUrl){
            pageLoadingTime = getPageLoadingTime();
        }
    });

getPageLoadingTime()方法:

private long getPageLoadingTime(){
    long currentTime = new Date(System.currentTimeMillis()).getTime();
    return currentTime - pageLoading_StartTime;
}

然后在缩放按钮OnClickListeners:

zoomIn.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            startOnClickAnimation(v);
            makeTextBigger();
            show_Progressbar_IfRequired();
        }
});

show_Progressbar_IfRequired():

private void show_Progressbar_IfRequired(){
    if(pageLoadingTime > loadingTimeThreshold){
        show_WebviewLoadingProgressBar();
        hideProgressBar_After_PageLoadingTime(pageLoadingTime);
    }
}

如果进度条可见,我会在pageLoadingTime之后隐藏它。我用一个处理程序来做这件事。

private void hideProgressBar_After_PageLoadingTime(long interval){
    Handler handler = new Handler();
    Runnable runnable = new Runnable(){
        public void run() {
            hide_WebviewLoadingProgressBar();
        }
    };
    handler.postAtTime(runnable, System.currentTimeMillis()+interval);
    handler.postDelayed(runnable, interval);
}

现在它可以按照我的意愿运作。这个网站帮助我解决了这个问题。非常感谢你们所有人。