Android自定义带进度条WebView控件实现
需积分: 6 158 浏览量
更新于2024-08-30
收藏 104KB PDF 举报
"Android开发中,为提高用户体验,通常需要创建一个带有进度条的WebView来显示网页内容。本文介绍了一种方法,通过封装自定义控件和公共Activity,避免layout嵌套,简化加载网页的过程。"
在Android应用开发中,WebView是用于加载和展示网页的组件,而进度条(ProgressBar)则可以向用户显示加载状态,提升用户体验。为了减少布局文件(layout.xml)的复杂性,我们可以创建一个自定义的`LoadingWebView`控件,将进度条与WebView结合。下面我们将深入探讨如何实现这一功能。
首先,我们创建一个名为`LoadingWebView`的自定义WebView类,它继承自Android原生的WebView。在该类中,我们需要添加一个ProgressBar成员变量,并提供初始化方法来设置这个进度条。以下是一个简单的代码示例:
```java
public class LoadingWebView extends WebView {
private ProgressBar mProgressBar;
public LoadingWebView(Context context) {
this(context, null);
}
public LoadingWebView(Context context, AttributeSet attrs) {
this(context, attrs, 0);
}
public LoadingWebView(Context context, AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
init();
}
private void init() {
// 初始化进度条
mProgressBar = new ProgressBar(getContext());
// 设置进度条样式,可选
mProgressBar.setProgressStyle(ProgressBar.STYLE_HORIZONTAL);
// 添加到WebView的父视图中,通常是LinearLayout或RelativeLayout
addView(mProgressBar, new LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.WRAP_CONTENT));
// 设置WebView特性,如WebSettings,WebViewClient等
// ...
}
}
```
接着,我们需要在WebView加载网页时更新进度条的进度。为此,我们需要覆盖`WebViewClient`的`onPageStarted`和`onPageFinished`方法。当页面开始加载时,启动进度条;页面加载完成时,隐藏进度条。示例如下:
```java
public class LoadingWebViewClient extends WebViewClient {
@Override
public void onPageStarted(WebView view, String url, Bitmap favicon) {
super.onPageStarted(view, url, favicon);
// 显示进度条
mProgressBar.setVisibility(View.VISIBLE);
mProgressBar.setProgress(0);
}
@Override
public void onPageFinished(WebView view, String url) {
super.onPageFinished(view, url);
// 隐藏进度条
mProgressBar.setVisibility(View.GONE);
}
// 其他重写的方法...
}
```
最后,为了让使用更便捷,我们可以创建一个公共的`MainActivity`,并传递URL和标题参数。在`MainActivity`中,我们可以实例化`LoadingWebView`,设置WebViewClient,并加载指定的网页。如下所示:
```java
public class MainWebViewActivity extends AppCompatActivity {
private LoadingWebView mWebView;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main_web_view);
mWebView = findViewById(R.id.web_view);
String url = getIntent().getStringExtra("url");
String title = getIntent().getStringExtra("title");
mWebView.setWebViewClient(new LoadingWebViewClient());
mWebView.getSettings().setJavaScriptEnabled(true); // 启用JavaScript
mWebView.loadUrl(url); // 加载网页
setTitle(title); // 设置Activity标题
}
}
```
这样,我们就可以在其他Activity中简单地通过Intent启动`MainWebViewActivity`,并传入URL和标题,实现一个通用的带进度条的WebView显示网页的功能。例如:
```java
Intent intent = new Intent(MainActivity.this, MainWebViewActivity.class);
intent.putExtra("url", "http://blog.csdn.net/qq_20785431");
intent.putExtra("title", "我的博客");
startActivity(intent);
```
通过这种方式,我们可以轻松地在各种场景下使用带进度条的WebView,提高了应用的用户体验。同时,这种封装方式也使得代码复用变得更为高效。
2016-06-06 上传
2019-08-13 上传
点击了解资源详情
2020-09-02 上传
2019-07-10 上传
2021-04-08 上传
2019-07-10 上传
2016-11-01 上传
2012-03-26 上传
weixin_38697753
- 粉丝: 1
- 资源: 956
最新资源
- 前端协作项目:发布猜图游戏功能与待修复事项
- Spring框架REST服务开发实践指南
- ALU课设实现基础与高级运算功能
- 深入了解STK:C++音频信号处理综合工具套件
- 华中科技大学电信学院软件无线电实验资料汇总
- CGSN数据解析与集成验证工具集:Python和Shell脚本
- Java实现的远程视频会议系统开发教程
- Change-OEM: 用Java修改Windows OEM信息与Logo
- cmnd:文本到远程API的桥接平台开发
- 解决BIOS刷写错误28:PRR.exe的应用与效果
- 深度学习对抗攻击库:adversarial_robustness_toolbox 1.10.0
- Win7系统CP2102驱动下载与安装指南
- 深入理解Java中的函数式编程技巧
- GY-906 MLX90614ESF传感器模块温度采集应用资料
- Adversarial Robustness Toolbox 1.15.1 工具包安装教程
- GNU Radio的供应商中立SDR开发包:gr-sdr介绍