老套路先看效果:

直接上代码:

区分java和kotlin版本

Java版本:

package com.example.progresswebview;import android.os.Bundle;
import android.view.View;
import android.view.WindowManager;
import android.webkit.WebChromeClient;
import android.webkit.WebSettings;
import android.webkit.WebView;
import android.webkit.WebViewClient;
import android.widget.ProgressBar;
import android.widget.TextView;import androidx.appcompat.app.AppCompatActivity;import static android.view.View.GONE;
import static android.view.View.VISIBLE;/*** @author xiayiye5* 2020年6月5日14:47:18*/
public class JavaWebViewActivity extends AppCompatActivity {private ProgressBar pbAd;private WebView wvInternetPage;private TextView tvWebTitle;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_HIDDEN |WindowManager.LayoutParams.SOFT_INPUT_ADJUST_UNSPECIFIED);setContentView(R.layout.activity_webview_browser);String loadUrl = getIntent().getStringExtra("load_url");loadUrl = "https://blog.csdn.net/xiayiye5";String title = getIntent().getStringExtra("title");title = "下一页5博客首页";wvInternetPage = findViewById(R.id.pb_webView);tvWebTitle = findViewById(R.id.tv_web_title);pbAd = findViewById(R.id.pb_ad);WebViewOption(loadUrl, title);}private void WebViewOption(String loadUrl, String title) {tvWebTitle.setText(title);WebSettings settings = wvInternetPage.getSettings();settings.setJavaScriptEnabled(true);//允许打开js新窗口settings.setJavaScriptCanOpenWindowsAutomatically(true);settings.setDomStorageEnabled(true);wvInternetPage.setWebViewClient(new MyWebViewClient());wvInternetPage.setWebChromeClient(new MyChromeWebViewClient());wvInternetPage.loadUrl(loadUrl);}private class MyWebViewClient extends WebViewClient {@Overridepublic boolean shouldOverrideUrlLoading(WebView view, String url) {return super.shouldOverrideUrlLoading(view, url);}@Overridepublic void onPageFinished(WebView view, String url) {tvWebTitle.setText(view.getTitle());super.onPageFinished(view, url);}}private class MyChromeWebViewClient extends WebChromeClient {@Overridepublic void onProgressChanged(WebView view, int newProgress) {if (newProgress == 100) {pbAd.setVisibility(View.INVISIBLE);} else {if (pbAd.getVisibility() == GONE) {pbAd.setVisibility(VISIBLE);}pbAd.setProgress(newProgress);}super.onProgressChanged(view, newProgress);}}@Overridepublic void onBackPressed() {if (wvInternetPage.canGoBack()) {wvInternetPage.goBack();return;}super.onBackPressed();}
}

kotlin版本:

package com.example.progresswebviewimport android.os.Bundle
import android.view.View
import android.view.WindowManager
import android.webkit.WebChromeClient
import android.webkit.WebView
import android.webkit.WebViewClient
import android.widget.ProgressBar
import android.widget.TextView
import androidx.appcompat.app.AppCompatActivity/*** @author xiayiye5* 2020年6月5日14:47:18*/
class KotlinWebViewActivity : AppCompatActivity() {private var pbAd: ProgressBar? = nullprivate var wvInternetPage: WebView? = nullprivate var tvWebTitle: TextView? = nulloverride fun onCreate(savedInstanceState: Bundle?) {super.onCreate(savedInstanceState)window.setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_HIDDEN orWindowManager.LayoutParams.SOFT_INPUT_ADJUST_UNSPECIFIED)setContentView(R.layout.activity_webview_browser)var loadUrl = intent.getStringExtra("load_url")loadUrl = "https://blog.csdn.net/xiayiye5/category_7513606.html"var title = intent.getStringExtra("title")title = "下一页5|git的使用"wvInternetPage = findViewById(R.id.pb_webView)tvWebTitle = findViewById(R.id.tv_web_title)pbAd = findViewById(R.id.pb_ad)WebViewOption(loadUrl, title)}private fun WebViewOption(loadUrl: String, title: String) {tvWebTitle!!.text = titleval settings = wvInternetPage!!.settingssettings.javaScriptEnabled = true//允许打开js新窗口settings.javaScriptCanOpenWindowsAutomatically = truesettings.domStorageEnabled = truewvInternetPage!!.webViewClient = MyWebViewClient()wvInternetPage!!.webChromeClient = MyChromeWebViewClient()wvInternetPage!!.loadUrl(loadUrl)}private inner class MyWebViewClient : WebViewClient() {override fun shouldOverrideUrlLoading(view: WebView,url: String): Boolean {return super.shouldOverrideUrlLoading(view, url)}override fun onPageFinished(view: WebView, url: String) {tvWebTitle!!.text = view.titlesuper.onPageFinished(view, url)}}private inner class MyChromeWebViewClient : WebChromeClient() {override fun onProgressChanged(view: WebView, newProgress: Int) {if (newProgress == 100) {pbAd!!.visibility = View.INVISIBLE} else {if (pbAd!!.visibility == View.GONE) {pbAd!!.visibility = View.VISIBLE}pbAd!!.progress = newProgress}super.onProgressChanged(view, newProgress)}}override fun onBackPressed() {if (wvInternetPage!!.canGoBack()) {wvInternetPage!!.goBack()return}super.onBackPressed()}
}

再看下布局文件:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"xmlns:tools="http://schemas.android.com/tools"android:layout_width="match_parent"android:layout_height="match_parent"android:background="@null"android:orientation="vertical"><TextViewandroid:id="@+id/tv_web_title"android:layout_width="match_parent"android:layout_height="45dp"android:gravity="center"android:textColor="#000000"tools:text="标题" /><Viewandroid:layout_width="match_parent"android:layout_height="0.5dp"android:background="#999999" /><ProgressBarandroid:id="@+id/pb_ad"style="@android:style/Widget.ProgressBar.Horizontal"android:layout_width="match_parent"android:layout_height="2dp"android:progress="34"android:progressDrawable="@drawable/custom_progress" /><WebViewandroid:id="@+id/pb_webView"android:layout_width="match_parent"android:layout_height="match_parent" />
</LinearLayout>

进度条drawable资源:

<?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 android:shape="rectangle"><corners android:radius="5dp" /><gradientandroid:endColor="#EDEDED"android:startColor="#EDEDED" /></shape></item><item android:id="@android:id/progress"><clip><!--可裁剪对象--><shape android:shape="rectangle"><corners android:radius="5dp" /><gradientandroid:angle="45"android:endColor="#FB9162"android:startColor="#F84B61" /></shape></clip></item>
</layer-list>

如果看着比较复杂可下载源码:

带进度条的WebView下载

Android开发之带进度条的WebView相关推荐

  1. 自定义带进度条的WebView , 增加获取web标题和url 回掉

    1.自定义ProgressWebView package com.app.android05; import android.content.Context; import android.graph ...

  2. 基于Android开发的环形进度条(动态显示运动步数)

    使用自定义view画圆形进度条,设置目标值,输入当前值,根据值的不同计算出在圆内,超过圆的效果. 文件:url80.ctfile.com/f/25127180-740375809-2326f5?p=5 ...

  3. Android更新带进度条的通知栏

    在网上查询了下,Android版本号更新通知栏带进度条,醉了,基本都是复制过来.有的代码不全,连源代码下载都没有,有下载也须要积分.还不能用.真黑心啊!! 之前自己也写过自己定义通知栏Notifica ...

  4. uni-app中自定义图表(canvas实现chart图表)开发篇(1)-圆环带进度条

    经常开发中,会遇到各种各样图表,这时大家普遍会想到去找插件.uniapp中常用的有uchart.js和echart.js,这对图表要求不高的项目来说,是很便捷的.但有时会遇到一些定制图表,加上UI的美 ...

  5. android自定义带进度条的圆形图片

    前言:在项目听新闻的改版中需要实现环绕圆形新闻图片的进度条功能,作为技术预备工作我就去看了一些网上的相关的原理,做了一个自定义带进度条的圆形图片的demo,并将这个实现写成文章发布出来,谁需要了可以进 ...

  6. android解压zip文件进度条,Android实现文件解压带进度条功能

    解压的工具类 package com.example.videodemo.zip; public class ZipProgressUtil { /*** * 解压通用方法 * * @param zi ...

  7. android 上传图片进度条,Android带进度条的文件上传示例(使用AsyncTask异步任务)...

    最近项目中要做一个带进度条的上传文件的功能,学习了AsyncTask,使用起来比较方便,将几个方法实现就行,另外做了一个很简单的demo,希望能对大家有帮助,在程序中设好文件路径和服务器IP即可. d ...

  8. 带进度条的x5WebView

    我们在使用webview加载网页的时候都希望顶部都有个进度条显示加载进度,由于在Android 4.4以下版本的Webview使用的是WebKit内核,,而在Android 4.4及其以上版本使用的是 ...

  9. web app升级—带进度条的App自动更新

    带进度条的App自动更新,效果如下图所示:   技术:vue.vant-ui.5+ 封装独立组件AppProgress.vue: <template><div><van- ...

最新文章

  1. org.apache.hadoop.hbase.NotServingRegionException: hbase:meta,,1 is not online问题(暂时没有解决)
  2. Setuptool+pip安装
  3. 计算机网络「五」 运输层
  4. 靠谱测试人员需具备逻辑思考能力
  5. 解析库之——beautifulsoup
  6. 二叉树前序中序后序javascript_详解二叉树遍历(前序、中序、后序、层次遍历、深度优先、广度优先)...
  7. POJ1082 Calendar Game
  8. office 2016 install(office2016组件自定义安装程序) v5.9.3中文绿色版
  9. 自然语言表示简史(BERT/ELMO/Word2vec/LDA/Bow/Ohehot,词向量、句向量、优缺点、应用与解决的问题)
  10. VScode插件Markdown Preview Enhanced自定义字体style
  11. 程序员学习的5个国外网站推荐
  12. 热爱生命 - 汪国真
  13. python networkx 导入CSV文件画关系网络图
  14. MySQL查询与数据库设计 #万能公式 #思维导图 #MySQL查询 #数据库设计规范 #第二部分
  15. 前端与美工职能上的区别
  16. (一)注册微信个人订阅号
  17. 如何自己编写字符串处理函数
  18. 2019第十一周作业
  19. 【结构型模式】《大话设计模式》——读后感 (9)牛市股票还会亏钱?——外观模式
  20. 实现简单的直播互动功能,直播软件源码是如何做的

热门文章

  1. dex运行linux,随着三星最新的DeX更新,更多的手机可以使用Linux
  2. mysql 视图锁_如何诊断和处理锁等待
  3. java 多线程缓存_[Java教程]【JAVA并发编程实战】12、使用condition实现多线程下的有界缓存先进先出队列...
  4. python 将数组转化8位整数_int对象,永不溢出的整数
  5. dataframe两个表合并_DAXSQLPython实现报表项目存在串行的财务报表合并
  6. 《密码与安全新技术专题》第11周作业
  7. 【ADO.NET基础知识】SqlConnection、command、DataSet 、DataTable、dataAdapter
  8. OS10.11安装Cocoapods并集成ReactiveCocoa
  9. LeetCode Search Insert Position (二分查找)
  10. EBS DBA指南笔记(一)