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

针对“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日

相关文章

  • SpringBoot整合PageHelper实现分页查询功能详解

    SpringBoot整合PageHelper实现分页查询功能详解 SpringBoot是一个快速开发Java应用程序的框架,而PageHelper是一个用于分页查询的插件。本攻略将详细讲解如何在SpringBoot项目中整合PageHelper,实现分页查询功能。 1. 添加依赖 首先,在项目的构建文件中添加PageHelper的依赖。对于Maven项目,可…

    other 2023年10月17日
    00
  • java字符串格式化详解

    以下是关于“Java字符串格式化详解”的完整攻略,包括字符串格式化的介绍、示例说明等。 字符串格式化介绍 Java中的字符串格式化是指将一个字符串中的占位符换为具体的值。占位符可以是任何类型的数据,包括整数、浮点数、字符串等。Java中常用的字符串格式化方法是使用String.format()方法。 示例说明 以下是两个使用字符串格式化的示例说明: 示例一 …

    other 2023年5月7日
    00
  • 黑暗之魂3无法移动原地转圈的解决方法

    关于“黑暗之魂3无法移动原地转圈”的问题 “黑暗之魂3”是一款非常受欢迎的动作角色扮演游戏,在游戏中,有些玩家可能会遇到无法移动原地转圈的问题,这么做通常是因为需要改变视角或是调整角色位置,但是如果无法转圈,这个操作则变得非常困难。接下来,我们将为大家详细讲解这个问题的解决方法。 解决方法 方法一:使用鼠标 要解决这个问题,我们可以使用鼠标完成视角调整,方法…

    other 2023年6月27日
    00
  • Java中static关键字的作用和用法详细介绍

    下面是“Java中static关键字的作用和用法详细介绍”的完整攻略。 1. static的基本概念和作用 static关键字是Java中的一个修饰符,用来表示静态的,常用于变量、方法、代码块和内部类等的声明。 1.1 静态变量 在Java中,静态变量是指在类加载时就被分配内存并初始化的变量,不依赖于对象而存在。需要注意的是,静态变量是属于类的,因此可以通过…

    other 2023年6月27日
    00
  • mac安装jdk及环境变量配置文件

    下面是macOS操作系统中安装JDK及环境变量配置文件的完整攻略。 安装JDK 首先访问Oracle官网的JDK下载页面 https://www.oracle.com/java/technologies/javase-downloads.html,找到所需版本的JDK并点击下载。 等待下载完成后,双击下载的 “.dmg” 安装包文件。安装向导将引导您完成安装…

    other 2023年6月27日
    00
  • battleinfo

    Battleinfo攻略 在游戏开发中,battleinfo是一种常用的数据结构,用于存储战斗相关的信息,例如战斗场景、参战角色、敌人等。在本攻略中,我们将介绍battleinfo的详细说明,并提供两个示例说明。 数据结构 以下是battleinfo的数据结构: { "scene": "forest", "c…

    other 2023年5月6日
    00
  • Android 蓝牙BLE开发完全指南

    Android 蓝牙BLE开发完全指南 如果你想开发一款能够与周围的蓝牙BLE设备通信的Android应用程序,那么你需要了解如何使用Android提供的Bluetooth Low Energy(BLE)API。本指南将帮助你快速入门BLE开发,并通过两个示例,详细介绍如何使用Android BLE API建立连接、搜索设备、读写数据等操作。 基础概念 BL…

    other 2023年6月27日
    00
  • Python asyncore socket客户端开发基本使用教程

    Python asyncore socket客户端开发基本使用教程 什么是asyncore库 asyncore是Python中的标准库。它是处理异步socket代码的一个模块。asyncore模块必须与Python标准库中的socket模块一起使用,它提供了一种基于事件循环的方法来处理异步I/O操作。 asyncore库的使用方法 以下是使用asyncore…

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