webview代码实例化_WebView常用类和基本方法详解
- WebSettings:主要是对WebView进行管理配置
- WebViewClient:处理请求、通知事件
- 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常用类和基本方法详解相关推荐
- Python的Django框架中forms表单类的使用方法详解2
用户表单是Web端的一项基本功能,大而全的Django框架中自然带有现成的基础form对象,本文就Python的Django框架中forms表单类的使用方法详解. Form表单的功能 自动生成HTML ...
- ios 获取html的高度,iOS Webview自适应实际内容高度的4种方法详解
//第一种方法 - (void)webViewDidFinishLoad:(UIWebView *)webView { CGFloat webViewHeight=[webView.scrollVie ...
- python画图代码大全-Python实现画图软件功能方法详解
概述 虽然Python的强项在人工智能,数据处理方面,但是对于日常简单的应用,Python也提供了非常友好的支持(如:Tkinter),本文主要一个简单的画图小软件,简述Python在GUI(图形用户 ...
- python核心编程:Python面向对象程序设计中类的定义、实例化、封装及私有变量/方法详解
这篇文章主要介绍了Python面向对象程序设计中类的定义.实例化.封装及私有变量/方法,结合具体实例形式较为详细的分析了Python面向对象程序设计中类的定义.实例化.封装.私有变量.私有方法等相关使 ...
- java 对象重写equals方法_Java如何重写object类的equals方法详解
1.Object类的equals()方法: 比较两个对象是否是同一个对象,equals() 方法比较两个对象,是判断两个对象引用指向的是同一个对象,即比较 2 个对象的内存地址是否相等.是则返回tru ...
- Java中BigInteger类的使用方法详解,常用最全系列!
原创博文,欢迎转载,转载时请务必附上博文链接,感谢您的尊重. 在 Java 中,有许多数字处理的类,比如 Integer类,但是Integer类有一定的局限性. 我们都知道 Integer 是 Int ...
- Java中BigDecimal类的使用方法详解,常用最全系列!
Java在java.math包中提供的API类BigDecimal,用来对超过16位有效位的数进行精确的运算.对于Double类型的运算,通常使用此类处理,来有效避免精度问题. 下面,我们从五个功能点 ...
- openlayers添加按钮_OpenLayers3加载常用控件使用方法详解
本文实例为大家分享了OpenLayers3加载常用控件使用的具体代码,供大家参考,具体内容如下 1. 前言 地图控件就是对地图的缩放.全屏.坐标显示控件等,方便我们对地图进行操作.OpenLayers ...
- Python的Django框架中forms表单类的使用方法详解
Form Form的验证思路 前端:form表单 后台:创建form类,当请求到来时,先匹配,匹配出正确和错误信息. Django的Form验证实例: 创建project,进行基础配置文件配置 set ...
最新文章
- 个人在 laravel 开发中使用到的一些技巧(持续更新)
- Spring MVC 函数式编程进阶
- flutter 应用场景_【Flutter 1-12】Flutter手把手教程Dart语言——什么是泛型和泛型的使用场景...
- linux脚本 set env,linux 中 set,env,export,declare显示shell变量的区别
- 大班科学认识电子计算机教案与反思,幼儿园大班科学教案:认识电子计算器.doc...
- ZTree的API文档分享
- MS2108 USB 数字视频采集芯片 支持8bit/16bit BT601/BT709/BT656/ BT1120转USB
- 主机一拖二 linux,使opensuse12.1实现一拖二(拖机)的双人使用系统(上)
- PMP 项目管理过程组与知识领域梳理
- java 求矩阵的伴随矩阵_求矩阵伴随矩阵的java实现
- 转移操作和占用操作主机
- 一个简单光栅器的实现(四) 几何阶段的坐标变换的C++实现
- 网页跳转微信打开指定页面
- 什么是学习?如何学习?
- win10易升_小科普 | 彻底关闭Win10自动更新
- HDMI转MIPIDSI芯片,东芝TC358870
- Mybase使用教程-不古出品
- Redis说无法分配内存该怎么办?
- 04仿赶集网--(四)第一列
- python求最大公约数
热门文章
- 工作100:v-model自定义是父亲组件得值
- 工作78:获取本地数据
- “约见”面试官系列之常见面试题之第九十五篇之vue-router的组件组成(建议收藏)
- 前端学习(1815):前端调试之css flex 练习1
- 第一百零七期:她说,嫁人就选程序员!
- java学习(3):学生管理系统3
- 电感检测_三、电感线圈的识别与检测(二)
- CSS之基于视窗单位的排版
- 学计算机后悔转专业,大学转专业容易吗 会后悔吗
- linux打印mysql堆栈_第25问:MySQL 崩溃了,打印了一些堆栈信息,怎么读?