上一篇文章我们实现了一个简单的WebView,并且能够在程序中的不调用浏览器进行网页的展示和浏览,Android给WebView提供了一些子类,其子类下的方法能够让我们的WebView功能更加完善、性能更加的强大,接下来我们就一起来学习WebView常用的三大子类。WebView三大子类:

  1. WebSettings:主要是对WebView进行管理配置
  2. WebViewClient:处理请求、通知事件
  3. WebViewChromeClient:帮助WebView处理网站的JS的相关信息

我们在上篇文章实现WebView时,使用了一个setJavaScriptEnabled( )方法来支持JavaScript脚本,这个方法就是属于WebSettings类,下面我们通过在WebView中添加这些子类中的常用方法,来了解并掌握其用法和应用场景。

1、WebSettings类

  • webView.getSettings( ):创建WebSettings对象

  • setJavaScriptEnabled(true):WebView支持JavaScript

  • setPluginEnabled(true):WebView支持插件

  • setSupportZoom(true):WebView支持缩放

  • setAllowFileAccess(true):WebView能够访问文件

  • setLoadsImageAutomatically(true):支持自动加载图片

2、WebViewClient类

  • shouldOverrideUrlLoading( ):WebView打开网页,不调用浏览器

  • onPageStarted( ):开始载入页面时调用该方法,可以设置Loading等待页面

  • onPageFinished( ):结束页面加载时调用,可以设置关闭Loading条,等动作

3、WebChromeClient类

  • onProgressChanged( ):获取网页的加载进度

  • onReceivedTitle( ):获取网页的标题

以上就是一些比较基本常用的方法,当然,WebView子类中的方法很多,大家可以根据应用需求去相应的类中查看使用方法(Ctrl+点击类名)。

下面来实现一个实例:获取并显示网页的标题、开始、结束加载提示和显示加载进度。

新建一个ACtivity,首先我们来写布局文件,在Activity的布局文件中我们添加4个TextView控件,分别用于显示通过WebView下相应的方法获取到的网页标题、开始加载提示、结束加载提示,加载进度。再添加一个WebView控件,布局代码如下:

<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"    android:layout_width="match_parent"    android:layout_height="match_parent"    android:orientation="vertical"    android:gravity="center">    <TextView        android:id="@+id/tv_title"        android:gravity="center"        android:layout_width="match_parent"        android:layout_height="wrap_content"        android:textColor="#D52B2B"        android:layout_marginTop="10dp" />    <TextView        android:id="@+id/tv_start"        android:gravity="center"        android:layout_width="match_parent"        android:layout_height="wrap_content"        android:textColor="#D52B2B"        android:layout_marginTop="10dp" />    <TextView        android:id="@+id/tv_progress"        android:gravity="center"        android:layout_width="match_parent"        android:layout_height="wrap_content"        android:textColor="#D52B2B"        android:layout_marginTop="10dp" />    <TextView        android:id="@+id/tv_end"        android:gravity="center"        android:layout_width="match_parent"        android:layout_height="wrap_content"        android:textColor="#D52B2B"        android:layout_marginTop="10dp"        android:layout_marginBottom="10dp"/>    <WebView        android:id="@+id/webView"        android:layout_width="match_parent"        android:layout_height="match_parent" />LinearLayout>

布局好之后我们再回到Activity的java文件中,来声明找到控件,并通过WebView子类中的方法获实现我们需要显示的网页信息,代码如下:

public class WebView_Activity extends AppCompatActivity {    private WebView mWebView;    private TextView mTvStart,mTvProgress,mTvEnd,mTvTitle;    @SuppressLint("SetJavaScriptEnabled")    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_web_view_);        mWebView = findViewById(R.id.webView);        mTvStart = findViewById(R.id.tv_start);        mTvProgress = findViewById(R.id.tv_progress);        mTvEnd = findViewById(R.id.tv_end);        mTvTitle = findViewById(R.id.tv_title);        mWebView.getSettings().setJavaScriptEnabled(true);        mWebView.loadUrl("https://m.sogou.com/");        mWebView.setWebViewClient(new WebViewClient(){            @Override            public void onPageStarted(WebView view, String url, Bitmap favicon) {                super.onPageStarted(view, url, favicon);                mTvStart.setText("开始加载");            }            @Override            public void onPageFinished(WebView view, String url) {                super.onPageFinished(view, url);                mTvEnd.setText("加载结束");            }        });        mWebView.setWebChromeClient(new WebChromeClient(){            @Override            public void onProgressChanged(WebView view, int newProgress) {                super.onProgressChanged(view, newProgress);                if (newProgress < 100){                    String progress = newProgress + "%";                    mTvProgress.setText(progress);                }else{                    mTvProgress.setText("100%");                }            }            @Override            public void onReceivedTitle(WebView view, String title) {                super.onReceivedTitle(view, title);                mTvTitle.setText(title);            }        });    }    @Override    public boolean onKeyDown(int keyCode, KeyEvent event) {        // 如果按下的按键是返回键并且webView可以返回,就执行webView返回        if (keyCode == KeyEvent.KEYCODE_BACK && mWebView.canGoBack()) {            mWebView.goBack();            return true;        }        return super.onKeyDown(keyCode, event);    }}

上面代码中声明控件的代码不做解释,都是最基础的代码,我们先是通过连写的方式使用方法mWebView.getSettings().setJavaScriptEnabled(true)使WebView支持JavaScript,接着在setWebViewClient方法中通过匿名内部类的方法来重写WebViewClient子类中的方法:

  • onPageStarted:重写该方法,在调用该方法时,文本框中显示"开始加载"的提示信息

  • onPageFinished:重写该方法,在网页加载结束时,文本框中提示"加载结束"提示

接着通过setWebChromeClient方法,也是使用内部类的方式来添加WebChromeClient子类,并重写其中的显示加载进度的方法:

  • onProgressChanged:该方法就是用于获取网页加载进度,在该方法中,我们通过if、else语句判断,当前加载进度小于100时,会通过setText方法在TextView中显示当前的加载进度,其中newProgress就是当前的加载进度,否则显示100%

  • onReceivedTitle:这个方法是用于获取当前网页的标题,再拖setText方法将获取到的标题在TextView中显示出来。

最后通过重写onKeyDown方法,实现点击"Back"键返回前一个页面,在上篇文章中我们有详细的讲解。到这里为止,我们实例的需求都实现了,分别为显示网页标题,提示开始加载、结束加载信息,显示实时的加载进度。我们来运行程序,查看一下运行结果。如下图:

观察运行结果,我们能看到,当程序启动时,会在页面的顶部显示当前网页的标题,当网页开始加载时,会显示"开始加载"提示,在网页加载中,会显示实时的百分比加载进度,最后网页加载结束,会显示"加载结束"文字。而且我们能发现,当打开一个新页面时,上面这些信息会显示新加载页面的信息。

通过上面简单的实例我们能发现,使用WebView子类中的方法能让我们直观的了解更多的网页信息,我们还可以使用其子类中的其他方法提高WebView的性能和安全性,防止内存泄漏等。后续的文章我们会通过一些实例来实现。

获取更多的Android学习知识和信息,请关注我们的微信公众号:秉空课堂

webview代码实例化_WebView常用类和基本方法详解相关推荐

  1. Python的Django框架中forms表单类的使用方法详解2

    用户表单是Web端的一项基本功能,大而全的Django框架中自然带有现成的基础form对象,本文就Python的Django框架中forms表单类的使用方法详解. Form表单的功能 自动生成HTML ...

  2. ios 获取html的高度,iOS Webview自适应实际内容高度的4种方法详解

    //第一种方法 - (void)webViewDidFinishLoad:(UIWebView *)webView { CGFloat webViewHeight=[webView.scrollVie ...

  3. python画图代码大全-Python实现画图软件功能方法详解

    概述 虽然Python的强项在人工智能,数据处理方面,但是对于日常简单的应用,Python也提供了非常友好的支持(如:Tkinter),本文主要一个简单的画图小软件,简述Python在GUI(图形用户 ...

  4. python核心编程:Python面向对象程序设计中类的定义、实例化、封装及私有变量/方法详解

    这篇文章主要介绍了Python面向对象程序设计中类的定义.实例化.封装及私有变量/方法,结合具体实例形式较为详细的分析了Python面向对象程序设计中类的定义.实例化.封装.私有变量.私有方法等相关使 ...

  5. java 对象重写equals方法_Java如何重写object类的equals方法详解

    1.Object类的equals()方法: 比较两个对象是否是同一个对象,equals() 方法比较两个对象,是判断两个对象引用指向的是同一个对象,即比较 2 个对象的内存地址是否相等.是则返回tru ...

  6. Java中BigInteger类的使用方法详解,常用最全系列!

    原创博文,欢迎转载,转载时请务必附上博文链接,感谢您的尊重. 在 Java 中,有许多数字处理的类,比如 Integer类,但是Integer类有一定的局限性. 我们都知道 Integer 是 Int ...

  7. Java中BigDecimal类的使用方法详解,常用最全系列!

    Java在java.math包中提供的API类BigDecimal,用来对超过16位有效位的数进行精确的运算.对于Double类型的运算,通常使用此类处理,来有效避免精度问题. 下面,我们从五个功能点 ...

  8. openlayers添加按钮_OpenLayers3加载常用控件使用方法详解

    本文实例为大家分享了OpenLayers3加载常用控件使用的具体代码,供大家参考,具体内容如下 1. 前言 地图控件就是对地图的缩放.全屏.坐标显示控件等,方便我们对地图进行操作.OpenLayers ...

  9. Python的Django框架中forms表单类的使用方法详解

    Form Form的验证思路 前端:form表单 后台:创建form类,当请求到来时,先匹配,匹配出正确和错误信息. Django的Form验证实例: 创建project,进行基础配置文件配置 set ...

最新文章

  1. 个人在 laravel 开发中使用到的一些技巧(持续更新)
  2. Spring MVC 函数式编程进阶
  3. flutter 应用场景_【Flutter 1-12】Flutter手把手教程Dart语言——什么是泛型和泛型的使用场景...
  4. linux脚本 set env,linux 中 set,env,export,declare显示shell变量的区别
  5. 大班科学认识电子计算机教案与反思,幼儿园大班科学教案:认识电子计算器.doc...
  6. ZTree的API文档分享
  7. MS2108 USB 数字视频采集芯片 支持8bit/16bit BT601/BT709/BT656/ BT1120转USB
  8. 主机一拖二 linux,使opensuse12.1实现一拖二(拖机)的双人使用系统(上)
  9. PMP 项目管理过程组与知识领域梳理
  10. java 求矩阵的伴随矩阵_求矩阵伴随矩阵的java实现
  11. 转移操作和占用操作主机
  12. 一个简单光栅器的实现(四) 几何阶段的坐标变换的C++实现
  13. 网页跳转微信打开指定页面
  14. 什么是学习?如何学习?
  15. win10易升_小科普 | 彻底关闭Win10自动更新
  16. HDMI转MIPIDSI芯片,东芝TC358870
  17. Mybase使用教程-不古出品
  18. Redis说无法分配内存该怎么办?
  19. 04仿赶集网--(四)第一列
  20. python求最大公约数

热门文章

  1. 工作100:v-model自定义是父亲组件得值
  2. 工作78:获取本地数据
  3. “约见”面试官系列之常见面试题之第九十五篇之vue-router的组件组成(建议收藏)
  4. 前端学习(1815):前端调试之css flex 练习1
  5. 第一百零七期:她说,嫁人就选程序员!
  6. java学习(3):学生管理系统3
  7. 电感检测_三、电感线圈的识别与检测(二)
  8. CSS之基于视窗单位的排版
  9. 学计算机后悔转专业,大学转专业容易吗 会后悔吗
  10. linux打印mysql堆栈_第25问:MySQL 崩溃了,打印了一些堆栈信息,怎么读?