Android自定义带进度条WebView控件实现
需积分: 6 33 浏览量
更新于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 上传
weixin_38697753
- 粉丝: 1
- 资源: 956
最新资源
- StepSequencer
- HelloWorld:这是CrossUI GitHub创建的无代码编程项目
- Monster-Roledex:创建这个存储库是为了研究React中类的使用
- pikascript-master.zip
- DouPHP_v1_php_bankzeu_源码.rar.rar
- 数学建模国赛优秀论文.zip
- 8337177.zip_文件操作_Visual_Basic_
- QD-AdminTools-Community.github.io
- GoNo Go 任务的分层 RL-DDM 模型matlab代码.zip
- 物联网设备的高效HTTP块传输编码
- 开源PHP个人技术导航系统网站源码_带后台
- Accelerating-Ball-Game:一个简单的安卓小游戏,手指滑动给小球一个初速度,让小球在屏幕空间内来回弹,小球会逐渐减速减少,除非碰到了加速区,当游戏结束时,程序会告诉你小球反弹了多少次,次数越多越好
- 15883830MPPT_Fuzzy_PO_光伏系统_mpptmethod_mppt_光伏mppt_源码.rar.rar
- Cadence Guestbook Host-开源
- 关于 6-DOF 履带式机器人操纵器控制的matlab代码.zip
- VB窗体拖放应用示例