我使用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();
}
});
任何帮助将不胜感激。
答案 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);
}
现在它可以按照我的意愿运作。这个网站帮助我解决了这个问题。非常感谢你们所有人。