Android Webview添加网页加载进度条实例详解

yizhihongxing

针对“Android Webview添加网页加载进度条实例详解”,我们可以从以下几个方面进行讲解。

一、添加进度条布局

首先需要为Webview添加一个进度条布局,代码如下:

    <LinearLayout
        android:id="@+id/ll_webview_wrapper"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:orientation="vertical">

        <ProgressBar
            android:id="@+id/progressBar"
            style="@style/Widget.AppCompat.ProgressBar.Horizontal"
            android:layout_width="match_parent"
            android:layout_height="5dp"
            android:layout_gravity="center"
            android:layout_marginTop="-5dp"
            android:progressDrawable="@drawable/webview_progress_bar" />

        <WebView
            android:id="@+id/webview"
            android:layout_width="match_parent"
            android:layout_height="match_parent" />

    </LinearLayout>

在这个布局中,我们先定义了一个垂直方向的LinearLayout,然后在该LinearLayout内部放置了一个ProgressBar和一个WebView。ProgressBar的样式使用了系统提供的水平进度条样式,然后我们将它的高度设置为5dp,并且增加了一个 -5dp 的marginTop,是为了让ProgressBar与WebView之间留出一点空隙。

二、编写加载进度变化监听器

接下来我们需要编写一个进度变化监听器,负责监听页面的加载进度变化,并且更新ProgressBar的进度。代码如下:

public class MyWebviewClient extends WebViewClient {
    private ProgressBar mProgressBar;

    public MyWebviewClient(ProgressBar progressBar) {
        mProgressBar = progressBar;
    }

    @Override
    public void onPageStarted(WebView view, String url, Bitmap favicon) {
        super.onPageStarted(view, url, favicon);
        mProgressBar.setProgress(0);
        mProgressBar.setVisibility(View.VISIBLE);
    }

    @Override
    public void onPageFinished(WebView view, String url) {
        super.onPageFinished(view, url);
        mProgressBar.setProgress(100);
        mProgressBar.setVisibility(View.GONE);
    }

    @Override
    public void onProgressChanged(WebView view, int newProgress) {
        super.onProgressChanged(view, newProgress);
        mProgressBar.setProgress(newProgress);
    }
}

这段代码中,我们继承了WebViewClient,并且在其内部重写了一些关键的回调方法。onPageStarted() 方法会在开始加载页面时被调用,我们在这里将ProgressBar的进度归零,并且显示出ProgressBar。同理,onPageFinished() 方法会在页面加载完成后被调用,我们在这里将ProgressBar的进度设置为100,并且将ProgressBar隐藏。

最后,我们需要重写onProgressChanged()方法,这个方法则会在页面加载过程中被多次调用,我们在这里将ProgressBar的进度设置为当前页面加载进度即可。

三、设置WebView的Client

接下来我们需要将自定义的WebviewClient设置给WebView。代码如下:

WebView mWebView = findViewById(R.id.webview);
ProgressBar mProgressBar = findViewById(R.id.progressBar);
mWebView.setWebViewClient(new MyWebviewClient(mProgressBar));

这段代码很简单,我们在SetWebViewClient()方法中指定了我们自定义的WebviewClient,并且将ProgressBar也传了进去,这样我们就可以在WebviewClient中方便地处理ProgressBar的变化了。

至此,Android Webview 添加网页加载进度条的攻略就大致完成了。我们通过添加布局和编写WebviewClient的方式,实现了一个简单的进度条来监控Webview的加载进度。同时我们还可以考虑一些进阶的功能,例如添加WebView的错误处理方法,或者实现一个自定义的ProgressBar等等。

其中,我们对网上的一些文章进行了参考,以下是两个示例链接:

《Android WebView添加加载进度条》
《Android WebView 的使用详解》

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Android Webview添加网页加载进度条实例详解 - Python技术站

(0)
上一篇 2023年6月25日
下一篇 2023年6月25日

相关文章

  • python爬虫万能代码-最精简的爬虫

    以下是“python爬虫万能代码-最精简的爬虫”的完整攻略: 1. 导入必要的库 首先,我们需要导入必要的库。这个例子中,我们需要使用requests库和BeautifulSoup库。可以使用以下代码导入这些库: import requests from bs4 import BeautifulSoup 2. 发送请求并解析HTML 接下来,我们需要发送请求…

    other 2023年5月7日
    00
  • PHP将数据导出Excel表中的实例(投机型)

    PHP将数据导出Excel表中的实例(投机型) 简介 在PHP中,我们可以使用第三方库来将数据导出到Excel表中。本攻略将使用PHPExcel库来实现这一功能。PHPExcel是一个功能强大的PHP库,可以创建和操作Excel文件。 步骤 以下是将数据导出到Excel表中的步骤: 安装PHPExcel库:首先,你需要下载并安装PHPExcel库。你可以从官…

    other 2023年8月5日
    00
  • react源码中的生命周期和事件系统实例解析

    React源码中的生命周期和事件系统实例解析 React.js是一个广泛使用的JavaScript库,它使用组件定义的方式构建用户界面,而且生命周期和事件系统是React.js的核心特性之一。本篇攻略将详细讲解React源码中生命周期和事件系统的实例解析,并包含两条示例说明。 生命周期 生命周期概览 React 组件从创建到消亡都有特定的生命周期方法,可以用…

    other 2023年6月27日
    00
  • Seesion在C++服务端的使用方法

    当我们在C++服务端开发过程中需要保持客户端的状态时,就可以使用Session来传递信息。Session可以存储客户端的信息并维持其状态,在服务端得到持续的处理。下面我们来介绍一下Session在C++服务端的使用方法,包含以下几个步骤: 1.创建Session 在HTTP请求处理过程中,我们需要首先创建Session对象来存储会话信息。一般情况下,我们会将…

    other 2023年6月27日
    00
  • 电脑一开机就自动重启怎么解决有哪些方法

    电脑一开机就自动重启,是一种比较常见的问题,往往是由于硬件或软件故障引起的。本篇攻略将介绍如何解决这个问题,并提供两个实例说明。 诊断问题 首先,我们需要确认问题的原因。电脑自动重启的原因可能有很多,包括: 硬件故障,如电源、内存、硬盘、显卡等 软件问题,如操作系统的错误、驱动程序的故障、恶意软件感染等 BIOS设置问题 为了确定问题的原因,我们需要进行诊断…

    other 2023年6月27日
    00
  • java解析{{}}变量名以及文本内容替换操作

    Java解析{{}}变量名以及文本内容替换操作攻略 在Java中,解析{{}}变量名以及替换文本内容是一种常见的操作。这种操作通常用于模板引擎或文本生成器中,允许我们动态地替换文本中的变量。 下面是一个完整的攻略,包含了解析{{}}变量名和替换文本内容的步骤以及两个示例说明。 步骤一:解析{{}}变量名 使用正则表达式匹配文本中的{{}}变量名。可以使用Pa…

    other 2023年8月8日
    00
  • Sql 批量查看字符所在的表及字段

    SQL 批量查看字符所在的表及字段,涉及到字符所在的表及字段的查找,我们可以通过如下的步骤来实现: 使用information_schema系统表查询字符所在的表及字段名 构造动态 SQL 语句,实现具体功能 下面具体讲解如何通过以上步骤来实现 SQL 批量查看字符所在的表及字段的功能。 步骤1:使用information_schema系统表查询字符所在的表…

    other 2023年6月25日
    00
  • 学习Angular中作用域需要注意的坑

    学习Angular中作用域需要注意的坑 在学习Angular时,作用域是一个需要特别注意的概念。作用域决定了变量的可见性和访问权限,因此了解作用域的一些常见陷阱是非常重要的。本攻略将详细讲解学习Angular中作用域需要注意的坑,并提供两个示例说明。 1. 使用ng-repeat时的作用域问题 在使用ng-repeat指令时,需要注意作用域的继承关系。ng-…

    other 2023年8月19日
    00
合作推广
合作推广
分享本页
返回顶部