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,一经查实,立即删除!

相关文章

TFS2010 删除工作区(同时删除工作区中所有的目录映射)

删除工作区 tf workspace /delete 工作区名;创建的用户 /server:TFS服务器 例tf workspace /delete WHQ-PC;whq /server:http://192.168.0.12:8080/tfs/defaultcollection注&#xff1a;该操作会同时删除工作区中所有的目录映射&#xff0c;所有项目需要重新映射。

Android pop3与imap方式接收邮件(javamail)

需要下载3个jar包&#xff1a;mail.jar/ activation.jar/ additionnal.jar 1.pop3 /*** 以pop3方式读取邮件&#xff0c;此方法不能读取邮件是否为已读&#xff0c;已经通过测试* */private void getEmail() {List<Map<String, Object>> list new ArrayList…

前端学习(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远…

js 获取url参数(QueryString)

/// <summary>/// 获取url参数/// 王洪岐/// </summary>function QueryString(fieldName) {var urlString document.location.search;if (urlString ! null) {var typeQu fieldName "";var urlEnd urlString.indexOf(typeQu);if (urlEnd ! -1) {var …

【dubbo】消费者Consumer搭建

一.consumer搭建&#xff08;可以web/jar&#xff09; 1.新建Maven项目&#xff0c;groupId&#xff1a;com.dubbo.consumer.demo artifactId:demo projectName:dubboo-consumer-demo 2.新建class &#xff1a;com.dubbo.consumer.demo.DemoAction package com.dubbo.consumer.…

js 获取某iframe中document,浏览器兼容

/// <summary>/// 获取iframe中document&#xff0c;浏览器兼容/// 王洪岐/// id:iframe的ID/// </summary>function getIFrameDOM(id) {return document.getElementById(id).contentDocument || document.frames[id].document; }

c# mysql executenonquery_C#中ExecuteNonQuery()返回值注意点分析

本文实例讲述了C#中ExecuteNonQuery()返回值注意点。对于C#数据库程序设计有一定的借鉴价值。分享给大家供大家参考之用。具体分析如下&#xff1a;首先&#xff0c;在查询某个表中是否有数据的时候&#xff0c;我们通常用ExecuteNonQuery()&#xff0c;并通过判断值是否大于0来…

前端学习(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…

数据库 数据库SQL语句五

集合运算union 并集&#xff08;两个集合如果有重复部分&#xff0c;那么只显示一次重复部分&#xff09; union all 并集&#xff08;两个集合如果有重复部分&#xff0c;那么重复部分显示两次&#xff09; intersect 交集 minus 差集--查询部门号是10和20号的员工信息 select…

SQLServer windows身份验证连接字符串

server.;databaseTest;Integrated SecurityTrue;

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

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

vue-router之路由属性配置说明

minix 是个什么东西&#xff0c; 就是混合&#xff0c;把你混合给我 浅显表述就是 你说 &#xff1a; ‘我叫李四’&#xff0c; 我说 &#xff1a; ‘我叫张三’&#xff0c; 然后把你 混合给我&#xff0c; 就成了 我说 &#xff1a; ‘我叫张三我叫李四’&#xff0c; 所…

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

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

lambda写法(多参数)

Lambda 表达式基本形式(input parameters) > expression< XMLNAMESPACE PREFIX "[default]" httpmsdnmicrosoftcommtps NS "http://msdn2.microsoft.com/mtps" />只有在 Lambda 有一个输入参数时&#xff0c;括号才是可选的&#xff1b;否则括号是…

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…

C# Repeater绑定显示数组

此处绑定的对象拥有string[] Contents属性&#xff0c;绑定时将Contents[0]和Contents[1]分别绑定<asp:Repeater runat"server" ID"rptDatabase"><ItemTemplate><li><a href"Database.aspx?id<%#Eval("Contents[0]&quo…

spring使用JdbcTemplate和jdbcDaosupport及具名参数使用

关于jdbctemplate: 个人感觉比Java链接mysql那一套方便好维护多了&#xff0c;只需在配置文件维护即可 需要的包&#xff1a; com.springsource.net.sf.cglib-2.2.0.jarcom.springsource.org.aopalliance-1.0.0.jarcom.springsource.org.aspectj.weaver-1.6.8.RELEASE.jarcommo…