Android自定义带进度条WebView实现详解
需积分: 0 82 浏览量
更新于2024-09-02
收藏 101KB PDF 举报
"Android平台下创建一个带有进度条的通用WebView组件的实践介绍"
在Android应用开发中,WebView是一个常用的组件,用于加载和展示网页内容。然而,在网页加载过程中,用户可能需要明确的反馈来了解加载进度,这就是进度条的作用。本资源主要讲解如何在Android中打造一个通用的、带有进度条的WebView,提供更好的用户体验。
首先,开发者通常会在布局文件中直接添加一个ProgressBar,但这会增加布局的复杂性。为了避免嵌套布局,我们可以创建一个自定义的WebView类,将ProgressBar集成到其中。这样,当WebView加载网页时,进度条会自动更新,显示加载进度。
下面是一个自定义的LoadingWebView类的代码片段:
```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(context);
}
private void init(Context context) {
mProgressBar = new ProgressBar(context, null, android.R.attr.progressBarStyleHorizontal);
addView(mProgressBar, new LayoutParams(LayoutParams.MATCH_PARENT, 5));
// 设置WebView属性,如启用JavaScript、设置缓存等
// ...
}
@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);
}
@Override
public void onProgressChanged(WebView view, int newProgress) {
super.onProgressChanged(view, newProgress);
if (newProgress == 100) {
mProgressBar.setVisibility(View.GONE);
} else {
mProgressBar.setProgress(newProgress);
}
}
// 可能还需要重写其他方法,例如处理WebChromeClient和WebViewClient
}
```
在这个自定义的WebView中,我们创建了一个水平的ProgressBar,并在页面开始加载时将其设置为可见,随着网页加载进度的增加,进度条的进度也会随之更新。当页面加载完成时,进度条将隐藏。
为了更方便地使用这个组件,我们可以创建一个公共的Activity,比如`MainWebViewActivity`,它接受URL和标题作为参数,然后在活动中使用我们的自定义LoadingWebView来加载网页:
```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);
Intent intent = getIntent();
String url = intent.getStringExtra("url");
String title = intent.getStringExtra("title");
mWebView.loadUrl(url);
setTitle(title);
}
}
```
在启动这个Activity时,只需传入URL和标题即可:
```java
Intent intent = new Intent(MainActivity.this, MainWebViewActivity.class);
intent.putExtra("url", "http://blog.csdn.net/qq_20785431");
intent.putExtra("title", "我的博客");
startActivity(intent);
```
此外,还可以考虑优化WebView的性能,例如启用缓存、禁用图片加载或设置自定义的WebSettings,以适应不同的网络环境和用户需求。
总结来说,通过创建一个自定义的LoadingWebView并结合一个简单的启动Activity,我们可以提供一个用户友好的界面,展示网页加载进度,提升用户的浏览体验。同时,这种封装方式使得在多个地方重复使用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_38672962
- 粉丝: 4
- 资源: 934
最新资源
- Haskell编写的C-Minus编译器针对TM架构实现
- 水电模拟工具HydroElectric开发使用Matlab
- Vue与antd结合的后台管理系统分模块打包技术解析
- 微信小游戏开发新框架:SFramework_LayaAir
- AFO算法与GA/PSO在多式联运路径优化中的应用研究
- MapleLeaflet:Ruby中构建Leaflet.js地图的简易工具
- FontForge安装包下载指南
- 个人博客系统开发:设计、安全与管理功能解析
- SmartWiki-AmazeUI风格:自定义Markdown Wiki系统
- USB虚拟串口驱动助力刻字机高效运行
- 加拿大早期种子投资通用条款清单详解
- SSM与Layui结合的汽车租赁系统
- 探索混沌与精英引导结合的鲸鱼优化算法
- Scala教程详解:代码实例与实践操作指南
- Rails 4.0+ 资产管道集成 Handlebars.js 实例解析
- Python实现Spark计算矩阵向量的余弦相似度