1.简介
开发中经常用到WebView加载网页,加载时需要显示进度条和网页标题,下面提供一个自动加载进度条和标题的WebView,进度条可自定义样式和高度,附带js与Android交互方法,可以满足大多数需求
先上效果图
加载中.png
加载完成.png
调用js中方法.png
js调用java中方法.png
2.ProgressWebView
自定义ProgressWebView继承WebView
//构造方法
public ProgressWebView(Context context, AttributeSet attrs) {
super(context, attrs);
//动态创建ProgressBar
progressbar = new ProgressBar(context, null,
android.R.attr.progressBarStyleHorizontal);
//设置ProgressBar的宽高和横纵坐标,坐标为0,0在最上方显示
progressbar.setLayoutParams(new LayoutParams(LayoutParams.FILL_PARENT,
5, 0, 0));
//将ProgressBar加入WebView
addView(progressbar);
setWebChromeClient(new WebChromeClient());
setWebViewClient(new webViewClient());
}
//WebChromeClient监听进度
public class WebChromeClient extends android.webkit.WebChromeClient {
@Override
public void onProgressChanged(WebView view, int newProgress) {
//当进度为100时,将进度条隐藏
if (newProgress == 100) {
progressbar.setVisibility(GONE);
} else { //不为100时,实时设置ProgressBar进度
if (progressbar.getVisibility() == GONE)
progressbar.setVisibility(VISIBLE);
progressbar.setProgress(newProgress);
}
super.onProgressChanged(view, newProgress);
}
}
//WebViewClient监听WebView重定向和加载完成后显示标题
class webViewClient extends WebViewClient {
@Override
public boolean shouldOverrideUrlLoading(WebView view, String url) {
view.loadUrl(url);
return true;
}
@Override
public void onPageFinished(WebView view, String url) {
super.onPageFinished(view, url);
//当加载完毕后,调用view.getTitle()获取网页的标题
if(onTitleReceivedListener != null){
onTitleReceivedListener.onTitleReceived(view.getTitle());
}
}
}
//定义显示标题的接口
public interface OnTitleReceivedListener{
void onTitleReceived(String title);
}
//接口set方法
public void setOnTitleReceivedListener(OnTitleReceivedListener onTitleReceivedListener) {
this.onTitleReceivedListener = onTitleReceivedListener;
}
//设置ProgressBar的样式,可以自定义
public void setProgressbarDrawable(Drawable d