Android实现带进度条的WebView
时间:2022-07-27
本文章向大家介绍Android实现带进度条的WebView,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
在加载H5页面的时候,可能由于网络、页面内容复杂度等原因,导致加载过程出现空白,加上进度条可以有效提高用户体验
一、自定义ProgressWebView类
public class ProgressWebView extends WebView {
private ProgressBar progressbar;
public ProgressWebView(Context context, AttributeSet attrs) {
super(context, attrs);
progressbar = new ProgressBar(context, null,
android.R.attr.progressBarStyleHorizontal);
progressbar.setLayoutParams(new LayoutParams(LayoutParams.FILL_PARENT,
5, 0, 0));
Drawable drawable = context.getResources().getDrawable(R.drawable.progress_bar_states);
progressbar.setProgressDrawable(drawable);
addView(progressbar);
// setWebViewClient(new WebViewClient(){});
setWebChromeClient(new WebChromeClient());
//是否可以缩放
getSettings().setSupportZoom(true);
getSettings().setBuiltInZoomControls(true);
}
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);
}
}
@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);
super.onScrollChanged(l, t, oldl, oldt);
}
}
二、布局文件标签写成自定义的类,使用和一般WebView一致
最后贴一下drawable下的progress_bar_states
<?xml version="1.0" encoding="utf-8"?
<layer-list xmlns:android="http://schemas.android.com/apk/res/android"
<item android:id="@android:id/background"
<shape
<corners android:radius="2dp" /
<gradient
android:angle="270"
android:centerColor="#E3E3E3"
android:endColor="#E6E6E6"
android:startColor="#C8C8C8" /
</shape
</item
<item android:id="@android:id/progress"
<clip
<shape
<corners android:radius="2dp" /
<gradient
android:centerColor="#4AEA2F"
android:endColor="#31CE15"
android:startColor="#5FEC46" /
</shape
</clip
</item
</layer-list
以上就是本文的全部内容,希望对大家的学习有所帮助。
- 搭建移动端的跨平台开发环境
- 30分钟全面解析-SQL事务+隔离级别+阻塞+死锁
- 【最新TensorFlow1.4.0教程03】利用Eager Execution构建和训练卷积神经网络(CNN)
- 360护心镜脚本分析及N种绕过方式
- 清北集训Day6T1(生成函数)
- 变种XSS:持久控制
- 洛谷P1291 [SHOI2002]百事世界杯之旅(期望DP)
- 新型XSS总结两则
- 设计一个有getMin功能的栈
- BZOJ4832: [Lydsy1704月赛]抵制克苏恩(期望DP)
- 基于连通性状态压缩的动态规划问题
- 常见Flash XSS攻击方式
- BZOJ2134: 单选错位(期望乱搞)
- 详解斯坦纳点及斯坦纳树及模版归纳总结
- java教程
- Java快速入门
- Java 开发环境配置
- Java基本语法
- Java 对象和类
- Java 基本数据类型
- Java 变量类型
- Java 修饰符
- Java 运算符
- Java 循环结构
- Java 分支结构
- Java Number类
- Java Character类
- Java String类
- Java StringBuffer和StringBuilder类
- Java 数组
- Java 日期时间
- Java 正则表达式
- Java 方法
- Java 流(Stream)、文件(File)和IO
- Java 异常处理
- Java 继承
- Java 重写(Override)与重载(Overload)
- Java 多态
- Java 抽象类
- Java 封装
- Java 接口
- Java 包(package)
- Java 数据结构
- Java 集合框架
- Java 泛型
- Java 序列化
- Java 网络编程
- Java 发送邮件
- Java 多线程编程
- Java Applet基础
- Java 文档注释
- 常见排序算法及golang 实现
- CentOS 8 安装Git及基本配置
- 创建远程仓库,如何将本地项目上传到GitLab
- mysql索引原理,看这篇就够啦
- TypeScript 设计模式之抽象工厂
- vim插件的安装(NERDTree)
- php7的zval相关介绍
- Zend_string与写时复制
- php的引用类型底层解析
- Roslyn 解决 dotnet core 应用进程间引用找不到 runtimeconfig 依赖文件
- dotnet 在 UOS 国产系统上安装 dotnet sdk 的方法
- 清空Redis集群所有节点的数据工具
- php数组hashtable的巧妙设计
- php运行生命周期--模块初始化php_module_startup
- Visual Studio Code的用户设置相关