Android Webview添加网页加载进度条实例详解
在Android应用开发中,Webview是一个非常重要的组件,它允许我们在原生应用中嵌入网页内容。然而,为了让用户有更好的体验,通常我们需要在Webview加载网页的过程中显示加载进度条,以便用户知道网页的加载状态。本文将详细介绍如何在Android Webview中添加网页加载进度条的实例。 我们需要创建一个自定义的WebView类,这个类继承自WebView,并添加一个ProgressBar。在自定义的`ProgressWebView`类中,我们初始化一个水平样式(horizontal)的ProgressBar,并将其添加到Webview的布局中。这样,我们就可以在加载网页时显示这个进度条,当网页加载完成时隐藏它。 ```java public class ProgressWebView extends WebView { private ProgressBar progressBar; private Context context; public ProgressWebView(Context context, AttributeSet attrs) { super(context, attrs); this.context = context; progressBar = new ProgressBar(context, null, android.R.attr.progressBarStyleHorizontal); // 设置进度条的宽度和高度 progressBar.setLayoutParams(new LayoutParams(LayoutParams.MATCH_PARENT, 5)); // 设置进度条的背景图片 progressBar.setProgressDrawable(getResources().getDrawable(R.drawable.webbview_progressbar)); addView(progressBar); // 设置WebChromeClient,处理网页加载进度 setWebChromeClient(new WebChromeClient()); } ... } ``` 接下来,我们需要重写WebChromeClient的`onProgressChanged`方法,这个方法会在Webview加载网页时回调,传入当前的加载进度。我们将这个进度设置到ProgressBar上,并根据进度值来决定是否显示或隐藏进度条。 ```java public class ProgressWebView extends WebView { ... public class WebChromeClient extends android.webkit.WebChromeClient { @Override public 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); } ... } ... } ``` 此外,WebChromeClient还提供了处理JavaScript中的`console.log`、`alert()`等方法。在上面的代码中,我们也覆盖了这些方法,以便更好地控制与JavaScript的交互。 `onConsoleMessage`方法用于处理JavaScript中的`console.log`,将其日志输出到Android的logcat中,方便开发者调试。 ```java @Override public boolean onConsoleMessage(ConsoleMessage cm) { Log.d(TAG, "webview console " + cm.lineNumber() + " of " + cm.sourceId() + " : " + cm.message()); return true; } ``` `onJsAlert`方法则用于处理JavaScript的`alert()`对话框,这里我们选择使用Toast显示消息,并取消默认的弹窗行为。 ```java @Override public boolean onJsAlert(WebView view, String url, String message, JsResult result) { ToastUtil.showMessage(context, message, Toast.LENGTH_SHORT, Gravity.CENTER); result.cancel(); return true; } ``` 我们还需要确保在Webview滚动时,进度条的位置能够随着内容的滚动而改变。为此,我们需要重写`onScrollChanged`方法。 ```java @Override protected void onScrollChanged(int l, int t, int oldl, int oldt) { LayoutParams lp = (LayoutParams) progressBar.getLayoutParams(); lp.x = l; lp.y = t; progressBar.setLayoutParams(lp); } ``` 通过以上步骤,我们就成功地在Android的Webview中实现了网页加载进度条的功能。当Webview加载网页时,用户可以看到进度条动态变化,直到网页完全加载完毕。这种方法不仅提升了用户体验,也让应用看起来更加专业和用户友好。
- 粉丝: 5
- 资源: 928
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- Java 代码覆盖率库.zip
- Java 代码和算法的存储库 也为该存储库加注星标 .zip
- 免安装Windows10/Windows11系统截图工具,无需安装第三方截图工具 双击直接使用截图即可 是一款免费可靠的截图小工具哦~
- Libero Soc v11.9的安装以及证书的获取(2021新版).zip
- BouncyCastle.Cryptography.dll
- 5.1 孤立奇点(JD).ppt
- 基于51单片机的智能交通灯控制系统的设计与实现源码+报告(高分项目)
- 什么是 SQL 注入.docx
- Windows 11上启用与禁用网络发现功能的操作指南
- Java Redis 客户端 GUI 工具.zip