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

上一篇文章我们实现了一个简单的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"键返回前一个页面,在上篇文章中我们有详细的讲解。到这里为止,我们实例的需求都实现了,分别为显示网页标题,提示开始加载、结束加载信息,显示实时的加载进度。我们来运行程序,查看一下运行结果。如下图:

c2b10aa87b465434b1d55894c8fb0d58.gif

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

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

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

194e73700fa6460b18c59c57ceaa4f7a.png

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/417436.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

前端学习(2236):react的列表渲染二

import React from react; import ReactDOM from react-dom;class Welcome extends React.Component {constructor(props) {super(props)this.state {list: [{title: "第一节课",content: 时间}, {title: "第一节课",content: 时间}, {title: "第三节…

win10 radmin远程不了_不用QQ也能电脑远程,win10这隐藏功能太良心了!真后悔发现太晚...

在工作中&#xff0c;我们难免会遇到一些棘手的电脑问题&#xff0c;自己搞定不了&#xff1f;那就找高手帮忙吧&#xff01;假若就在身旁还能帮上忙&#xff0c;但远在天边的又是鞭长莫及&#xff0c;这该如何是好呢&#xff1f;这时候大家都会想到QQ的远程功能。但经常用QQ远…

前端学习(2237):react实现疫情数据

import React from react; import ReactDOM from react-dom; import jsonData from ./code.jsonconsole.log(jsonData) let provinceObj {}/* let provinceObj{"广东省":{confirm:0,suspect:0,heal:0,deal:0}} */ jsonData.data.list.forEach((item, i) > {if (p…

jdbc mysql 存储过程查询数据_JDBC连接(MySql)数据库步骤,以及查询、插入、删除、更新等十一个处理数据库信息的功能。...

主要内容&#xff1a;JDBC连接数据库步骤。一个简单详细的查询数据的例子。封装连接数据库&#xff0c;释放数据库连接方法。实现查询&#xff0c;插入&#xff0c;删除&#xff0c;更新等十一个处理数据库信息的功能。(包括事务处理&#xff0c;批量更新等)把十一个功能都放在…

linux shell 用sed命令在文本的行尾或行首添加字符

from&#xff1a;http://www.cnblogs.com/aaronwxb/archive/2011/08/19/2145364.html 昨天写一个脚本花了一天的2/3的时间&#xff0c;而且大部分时间都耗在了sed命令上&#xff0c;今天不总结一下都对不起昨天流逝的时间啊~~~ 用sed命令在行首或行尾添加字符的命令有以下几种&…

linux 自动安装mysql_linux安装mysql教程

1.系统约定安装文件下载目录&#xff1a;/data/softwareMysql目录安装位置&#xff1a;/usr/local/mysql数据库保存位置&#xff1a;/data/mysql日志保存位置&#xff1a;/data/log/mysql执行如下命名&#xff1a;#mkdir /data/software#cd /data/software--下载安装包--建议&a…

密钥

【AES】 一种对称加密算法&#xff0c;DES的取代者。 加密相关文章见&#xff1a;Java 加密解密 对称加密算法 非对称加密算法 MD5 BASE64 AES RSA 【代码】 代码比较多&#xff0c;有一部分非本文章内容代码&#xff0c;具体自己看吧。 [java] view plaincopy print?package…

mysql复制安全性_从MySQL复制功能中得到一举三得实惠

在MySQL数据库中&#xff0c;支持单项、异步复制。在复制过程中&#xff0c;一个服务器充当主服务器&#xff0c;而另外一台服务器充当从服务器。如下图所示。此时主服务器会将更新信息写入到一个特定的二进制文件中。并会维护文件的一个索引用来跟踪日志循环。这个日志可以记录…

自定义安装mysql linux_linux下 安装mysql 问题

展开全部因为32313133353236313431303231363533e4b893e5b19e31333365633934mysql程序在启动的时候 非常依赖my.cnf里面的配置&#xff0c;而my.cnf文件中的配置&#xff0c;在执行mysql初始化的时候就可以手动指定。如果mysql不是使用yum安装&#xff0c;而是将mysql安装到自定…

前端学习(2244):计算器显示问题

<!DOCTYPE html> <html><head><meta charset"utf-8" /><title>奥里给&#xff01;</title><style type"text/css">.a {height: 100px;width: 450px;border: 3px solid black;background-color: beige;font-size…

MySQL索引原理及慢查询优化

MySQL凭借着出色的性能、低廉的成本、丰富的资源&#xff0c;已经成为绝大多数互联网公司的首选关系型数据库。虽然性能出色&#xff0c;但所谓“好马配好鞍”&#xff0c;如何能够更好的使用它&#xff0c;已经成为开发工程师的必修课&#xff0c;我们经常会从职位描述上看到诸…

C语言沉浸式刷题【C语言必刷题】

1.猜凶手 某地发生了一起谋杀案&#xff0c;警察通过排查确定杀人凶手必为四个嫌疑犯的一个&#xff0c;以下是4个嫌犯的供词。已知&#xff08;请编写代码找出凶手&#xff09; A说&#xff1a;不是我。 B说&#xff1a;是C。C说&#xff1a;是D。D说&#xff1a;C再胡说。 程…

python3 while循环语句_python While 循环语句

python While 循环语句发布时间&#xff1a;2018-02-12 16:46:28编辑&#xff1a;admin阅读(2055)python 编程中 while 语句用于循环执行程序&#xff0c;即在某条件下&#xff0c;循环执行某段程序&#xff0c;以处理需要重复处理的相同任务。其基本形式为&#xff1a;while 判…