【WebView】带加载进度条的WebView及Chrome联调

来源:互联网 发布:python 获取程序父目录 编辑:程序博客网 时间:2024/06/05 11:22

先看效果图:


看到顶部蓝色的进度条了。


原理:用到了 android.webkit.WebChromeClient中的onProgressChanged,而android.webkit.WebViewClient是没有这个方法的。所以普通的WebView是无法实现进度条的。


下面直接上干货:

/** * ProgressWebView *  * @author lif *  *  */@SuppressWarnings("deprecation")public class ProgressWebView extends WebView {private ProgressBar progressbar;@SuppressLint("NewApi")public ProgressWebView(Context context, AttributeSet attrs) {super(context, attrs);progressbar = new ProgressBar(context, null,android.R.attr.progressBarStyleHorizontal);progressbar.setLayoutParams(new LayoutParams(LayoutParams.MATCH_PARENT,16, 0, 0));addView(progressbar);setWebViewClient(new WebCustomClient());setWebChromeClient(new WebChromeClient());// 发布取消//Web开发调试之Chrome远程调试(Remote Debugging)会用到// setWebContentsDebuggingEnabled(true);getSettings().setDomStorageEnabled(true);//解决总是跳转第三方浏览器}public class WebCustomClient extends android.webkit.WebViewClient {@Overridepublic void onPageFinished(WebView view, String url) {// TODO Auto-generated method stubsuper.onPageFinished(view, url);// 页面下载完毕,却不代表页面渲染完毕显示出来// WebChromeClient中progress==100时也是一样if (view.getContentHeight() != 0) {// 这个时候网页才显示}}@Overridepublic boolean shouldOverrideUrlLoading(WebView view, String url) {// TODO Auto-generated method stub// 自身加载新链接,不做外部跳转view.loadUrl(url);return true;}}public class WebChromeClient extends android.webkit.WebChromeClient {@Overridepublic void onProgressChanged(WebView view, int newProgress) {if (newProgress == 100) {progressbar.setVisibility(GONE);} else {if (progressbar.getVisibility() == GONE)progressbar.setVisibility(VISIBLE);progressbar.setProgress(newProgress);}super.onProgressChanged(view, newProgress);}}@Overrideprotected void onScrollChanged(int l, int t, int oldl, int oldt) {LayoutParams lp = (LayoutParams) progressbar.getLayoutParams();lp.x = l;lp.y = t;progressbar.setLayoutParams(lp);super.onScrollChanged(l, t, oldl, oldt);}}

调用代码:

// ~~~ 设置数据webview.setVerticalScrollbarOverlay(true);webview.getSettings().setJavaScriptEnabled(true);webview.getSettings().setAllowFileAccess(true);webview.getSettings().setSavePassword(false);webview.setDownloadListener(new DownloadListener() {@Overridepublic void onDownloadStart(String url, String userAgent,String contentDisposition, String mimetype,long contentLength) {if (url != null&& (url.startsWith("http://") || url.startsWith("file:///")))startActivity(new Intent(Intent.ACTION_VIEW, Uri.parse(url)));}});webview.loadUrl(url);
有兴趣的朋友可以尝试一下


注意:关于Chrome远程开发调试可以参考移动端Web开发调试之Chrome远程调试(Remote Debugging)

1 0