WebView的简单使用和常用方法、属性!

【Android】webview常用方法和使用 webview详解 阅读详情

工作做私有化项目的时候遇到一个需求,就是当用户注册账号的时候,要跳转到客户自己的H5界面进行操作,这就需要Android和H5进行数据交互!

首先加载H5界面肯定需要使用WebView,那么先简单介绍下WebView的使用:
加载方式
加载一个网页:
webView.loadUrl(“http://www.google.com/“);
加载apk包中的一个html页面
webView.loadUrl(“file:///android_asset/test.html”);
加载手机本地的一个html页面的方法:
webView.loadUrl(“content://com.android.htmlfileprovider/sdcard/test.html”)
和WebView进行交互:WebViewClient
WebViewClient就是帮助WebView处理各种通知、请求事件的,
WebViewClient里面有很多的方法可以使用,其中最常用的回调方法就是
mWebView.setWebViewClient(new WebViewClient(){
//在点击请求的是链接是才会调用,重写此方法返回true表明点击网页里面的链接还是在当前的webview里跳转,不跳到浏览器那边。这个函数我们可以做很多操作,比如我们读取到某些特殊的URL,于是就可以不打开地址,取消这个操作,进行预先定义的其他操作,这对一个程序是非常必要的。
@Override
public boolean shouldOverrideUrlLoading(WebView view, String url)
{
view.loadUrl(url);
return true;
}
});
还有一些其他的回调方法,这里简单介绍一下:
doUpdateVisitedHistory(WebView view, String url, boolean isReload) //(更新历史记录)

onFormResubmission(WebView view, Message dontResend, Message resend) //(应用程序重新请求网页数据)

onLoadResource(WebView view, String url) // 在加载页面资源时会调用,每一个资源(比如图片)的加载都会调用一次。

onPageStarted(WebView view, String url, Bitmap favicon) //这个事件就是开始载入页面调用的,通常我们可以在这设定一个loading的页面,告诉用户程序在等待网络响应。

onPageFinished(WebView view, String url) //在页面加载结束时调用。同样道理,我们知道一个页面载入完成,于是我们可以关闭loading 条,切换程序动作。

onReceivedError(WebView view, int errorCode, String description, String failingUrl)// (报告错误信息)

onReceivedHttpAuthRequest(WebView view, HttpAuthHandler handler, String host,String realm)//(获取返回信息授权请求)

onReceivedSslError(WebView view, SslErrorHandler handler, SslError error) //重写此方法可以让webview处理https请求。

onScaleChanged(WebView view, float oldScale, float newScale) // (WebView发生改变时调用)

onUnhandledKeyEvent(WebView view, KeyEvent event) //(Key事件未被加载时调用)

shouldOverrideKeyEvent(WebView view, KeyEvent event)//重写此方法才能够处理在浏览器中的按键事件。

加载网页的时候我们还要对WebView进行一些属性的配置,这时候我们就需要得到WebSettings 类:
WebSettings webSettings = mWebView .getSettings();

下面是一些 WebSettings 的常用方法介绍:

webSettings.setRenderPriority(RenderPriority.HIGH); //提高渲染的优先级
setJavaScriptEnabled(true); //支持js
setPluginsEnabled(true); //支持插件
setUseWideViewPort(false); //将图片调整到适合webview的大小
setSupportZoom(true); //支持缩放
setLayoutAlgorithm(LayoutAlgorithm.SINGLE_COLUMN); //支持内容重新布局
supportMultipleWindows(); //多窗口
setCacheMode(WebSettings.LOAD_CACHE_ELSE_NETWORK); //关闭webview中缓存
setAllowFileAccess(true); //设置可以访问文件
setNeedInitialFocus(true); //当webview调用requestFocus时为webview设置节点
webview webSettings.setBuiltInZoomControls(true); //设置支持缩放
//若上面是false,则该WebView不可缩放,这个不管设置什么都不能缩放。
setDisplayZoomControls(false); //隐藏原生的缩放控件
setJavaScriptCanOpenWindowsAutomatically(true); //支持通过JS打开新窗口
setLoadWithOverviewMode(true); // 缩放至屏幕的大小
setLoadsImagesAutomatically(true); //支持自动加载图片
setCacheMode(WebSettings.LOAD_CACHE_ELSE_NETWORK); //关闭webview中缓存
setAllowFileAccess(true); //设置可以访问文件
setNeedInitialFocus(true); //当webview调用requestFocus时为webview设置节点
setJavaScriptCanOpenWindowsAutomatically(true); //支持通过JS打开新窗口
setLoadsImagesAutomatically(true); //支持自动加载图片
setDefaultTextEncodingName(“utf-8”);//设置编码格式

如果webView中需要用户手动输入用户名、密码或其他,则webview必须设置支持获取手势焦点:webview.requestFocusFromTouch();

当加载多个网页之后,点击返回键想返回上一个网页时需要执行onKeyDown()方法:
public boolean onKeyDown(int keyCode, KeyEvent event) {
if ((keyCode == KeyEvent.KEYCODE_BACK) && webview.canGoBack()) {
webview.goBack();
return true;
}
return super.onKeyDown(keyCode, event);
}

**关于缓存
缓存模式**
LOAD_CACHE_ONLY: 不使用网络,只读取本地缓存数据
LOAD_DEFAULT: (默认)根据cache-control决定是否从网络上取数据。
LOAD_NO_CACHE: 不使用缓存,只从网络获取数据.
LOAD_CACHE_ELSE_NETWORK,只要本地有,无论是否过期,或者no-cache,都使用缓存中的数据。

结合使用(离线加载):

if (NetStatusUtil.isConnected(getApplicationContext())) {
webSettings.setCacheMode(WebSettings.LOAD_DEFAULT);//根据cache-control决定是否从网络上取数据。
} else {
webSettings.setCacheMode(WebSettings.LOAD_CACHE_ELSE_NETWORK);//没网,则从本地获取,即离线加载
}

webSettings.setDomStorageEnabled(true); // 开启 DOM storage API 功能
webSettings.setDatabaseEnabled(true); //开启 database storage API 功能
webSettings.setAppCacheEnabled(true);//开启 Application Caches 功能

String cacheDirPath = getFilesDir().getAbsolutePath() + APP_CACAHE_DIRNAME;
webSettings.setAppCachePath(cacheDirPath); //设置 Application Caches 缓存目录

注意: 每个 Application 只调用一次 WebSettings.setAppCachePath(),WebSettings.setAppCacheMaxSize()

WebChromeClient
WebChromeClient是辅助WebView处理Javascript的对话框,网站图标,网站title,加载进度等 :
方法中的代码都是由Android端自己处理。

WebChromeClient mWebChromeClient = new WebChromeClient() {
//获得网页的加载进度,显示在右上角的TextView控件中
@Override
public void onProgressChanged(WebView view, int newProgress) {
if (newProgress < 100) {
String progress = newProgress + “%”;
} else {
}
}
//获取Web页中的title用来设置自己界面中的title
//当加载出错的时候,比如无网络,这时onReceiveTitle中获取的标题为 找不到该网页,
//因此建议当触发onReceiveError时,不要使用获取到的title
@Override
public void onReceivedTitle(WebView view, String title) {
MainActivity.this.setTitle(title);
}
@Override
public void onReceivedIcon(WebView view, Bitmap icon) {
//
}
@Override
public boolean onCreateWindow(WebView view, boolean isDialog, boolean isUserGesture, Message resultMsg) {
//
return true;
}
@Override
public void onCloseWindow(WebView window) {
}
//处理alert弹出框,html 弹框的一种方式
@Override
public boolean onJsAlert(WebView view, String url, String message, JsResult result) {
//
return true;
}
//处理confirm弹出框
@Override
public boolean onJsPrompt(WebView view, String url, String message, String defaultValue, JsPromptResult
result) {
//
return true;
}
//处理prompt弹出框
@Override
public boolean onJsConfirm(WebView view, String url, String message, JsResult result) {
//
return true;
}
};
最后,将上面定义的WebChromeClient设置给WebView:
webView.setWebChromeClient(mWebChromeClient);

WebView的方法
前进、后退
goBack()//后退
goForward()//前进
goBackOrForward(intsteps) //以当前的index为起始点前进或者后退到历史记录中指定的steps,
如果steps为负数则为后退,正数则为前进
canGoForward()//是否可以前进
canGoBack() //是否可以后退
清除缓存数据:
clearCache(true);//清除网页访问留下的缓存,由于内核缓存是全局的因此这个方法不仅仅针对webview而是针对整个应用程序.
clearHistory()//清除当前webview访问的历史记录,只会webview访问历史记录里的所有记录除了当前访问记录.
clearFormData()//这个api仅仅清除自动完成填充的表单数据,并不会清除WebView存储到本地的数据。
WebView的状态:
onResume() //激活WebView为活跃状态,能正常执行网页的响应
onPause()//当页面被失去焦点被切换到后台不可见状态,需要执行onPause动过, onPause动作通知内核暂停所有的动作,比如DOM的解析、plugin的执行、JavaScript执行。
pauseTimers()//当应用程序被切换到后台我们使用了webview, 这个方法不仅仅针对当前的webview而是全局的全应用程序的webview,它会暂停所有webview的layout,parsing,javascripttimer。降低CPU功耗。
resumeTimers()//恢复pauseTimers时的动作。
destroy()//销毁,关闭了Activity时,音乐或视频,还在播放。就必须销毁。
但是注意:
webview调用destory时,webview仍绑定在Activity上.这是由于自定义webview构建时传入了该Activity的context对象,因此需要先从父容器中移除webview,然后再销毁webview:
rootLayout.removeView(webView);
webView.destroy();
判断WebView是否已经滚动到页面底端 或者 顶端:
getScrollY() //方法返回的是当前可见区域的顶端距整个页面顶端的距离,也就是当前内容滚动的距离.
getHeight()或者getBottom() //方法都返回当前WebView这个容器的高度
getContentHeight()返回的是整个html的高度,但并不等同于当前整个页面的高度,因为WebView有缩放功能,所以当前整个页面的高度实际上应该是原始html的高度再乘上缩放比例.因此,更正后的结果,准确的判断方法应该是:
if (webView.getContentHeight() * webView.getScale() == (webView.getHeight() + webView.getScrollY())) {
//已经处于底端
}
if(webView.getScrollY() == 0){
//处于顶端
}
避免WebView内存泄露的一些方式
1.可以将 Webview 的 Activity 新起一个进程,结束的时候直接System.exit(0);退出当前进程;
启动新进程,主要代码: AndroidManifest.xml 配置文件代码如下

Android网络技术——WebView的简单使用 前言 Android WebView在Android平台上是一个特殊的View,它能用来显示网页,这个WebView类可以被用来在app中仅仅显示一张在线的网页,当然还可以用来开发浏览器。 那么这种该如何实现呢?其实这是Android里一个叫WebView的组件实现的。接下来我将简单介绍WebView的常用用法。 1.简介 WebView是一个基于webkit引擎、展现web页面的控件。 2.基本使用 WebView的最简单的使用方式即是直接显示网页内容,有以下三个步骤:   1.添加访问网络权限(An 阅读详情

相关推荐

【Flutter】Flutter 如何使用 WebView

在 Flutter 中使用 WebView 的基本方法,以及如何使用 `webview_flutter` 库。

Code Metaverse 7082

WebView-WebView简介

目录 1 WebView简介 2 Webkit简介 3 常用类 3.1 WebView 3.2 WebSetting 3.3 WebViewClient详解 3.4 WebChromeClient详解 4 调用Browser 4.1 启动android默认浏览器 4.2 启动指定浏览器打开 5 WebView加载方式 6 WebView的状态 7 WebView常用函数 ...

牛八少爷的专栏 2045

保姆级教程:用R包ggpicrust2搞定PICRUSt2功能预测,从差异分析到热图PCA一键出图

本文提供了一份详细的ggpicrust2使用指南,帮助用户从零开始完成PICRUSt2功能预测数据的差异分析和可视化。通过安装配置、数据导入、差异分析到高级可视化(如热图和PCA)的全流程讲解,即使是初学者也能快速掌握发表级图表的生成技巧。

weixin_33712987的博客 383

WebView使用总结

Android View的一种, 我们通常用它来在应用内部展示网页。(1)WebSettings用来对WebView做各种设置setJavaScriptEnabled(true); //支持jssetPluginsEnabled(true); //支持插件setJavaScriptCanOpenWindowsAutomatically(true); //支持通过JS打开新窗口缩放处理setUseW...

zhwadezh的博客 305

程序自动化填写网页表单数据

如何让程序自动化填写网页表单数据,特别是涉及到批量数据情况时,可以减少人力。下面是涉及到的一些场景,都可以通过相关自动化程序实现。

Y 2424

RK3588网络调试笔记:当我把默认RTL8211F PHY换成另一款时,踩了哪些坑?

本文详细记录了在RK3588平台上将默认RTL8211F PHY芯片替换为其他型号的全过程,包括硬件设计验证、内核驱动适配、复位时序配置等关键步骤。通过实际案例分享,提供了从驱动调试到硬件优化的系统性解决方案,帮助开发者高效完成PHY芯片替换,确保网络接口稳定性。

weixin_30291791的博客 669

web-view中页面录音无权限问题

iframe标签的allow属性是HTML5中用来控制iframe内嵌的内容所允许访问的权限的一个属性。11. “picture-in-picture”:允许将iframe中的视频以画中画模式播放。2,需要指定iframe的可使用权限,如果A域名和B域名不一致,需要开放域名限制*2. “autoplay”:允许iframe中的音视频自动播放。8. “magnetometer”:允许使用磁力计设备。9. “microphone”:允许使用麦克风设备。3. “camera”:允许使用摄像头设备。

qq_28546559的博客 2143

基本模型 PINNs : Physics Informed Neural Networks

系列最开始当然要提到很经典的文章 —— Physics-informed neural networks: A deep learning framework for solving forward and inverse problems involving nonlinear partial differential equations 。 这篇文章是布朗大学的助理教授Maziar Rais...

waitingwinter的博客 3万+

史上最全的WebSettings说明

setAllowContentAccess (boolean allow) 是否允许在WebView中访问内容URL(Content Url),默认允许。内容Url访问允许WebView从安装在系统中的内容提供者载入内容。 setAllowFileAccess (boolean allow) 是否允许访问文件,默认允许。注意,这里只是允许或禁止对文件系统的访问,Assets 和 resource

Kevins优快云的博客 1万+

水环境综合管控平台完整方案

水环境综合管控平台项目(2026-2027)摘要 项目概况: 总投资5亿元的水环境综合管控平台项目,是国家数字政府与生态文明建设战略的重要实践。项目严格遵循2026年最新政策标准,整合物联网、大数据和AI技术,构建覆盖水质监测、污染溯源、生态保护等全流程的智能管控体系。 核心内容: 系统架构:采用五层设计(基础设施层至展示层),集成10大核心功能模块,包括水质动态监测、污染智能溯源和生态评估预警系统; 技术创新:运用2026年最新边缘计算和数字孪生技术,实现毫秒级水质异常响应和三维流域仿真; 实施规划:分7

随读手记 403

Habitat安装全网最详细教程,手把手带你跑通example.py(全网唯一)

全网最详细具身智能仿真平台habitat的安装教程

shannanshouyin的博客 2755

WebView的基本常用属性 及方法

一、在xml布局文件中定义WebView标签 android:id="@+id/wv" android:layout_width="match_parent" android:layout_height="match_parent" /> 二、在activity中定义webview的属性及相应的函数 WebView wv=(WebView)findViewBy

cxc_cpf的博客 831

【YOLO系列】YOLOv5超详细解读(源码详解+入门实践+改进)

一文带你详细了解YOLOv5(含YOLO系列论文讲解+源码详解+入门实践+算法改进)

路人贾的博客 25万+

WebView的简单介绍和Android使用WebView无法显示网页

WebView的简单介绍: 现在许多手机app程序都在使用Web网页,比如咱们最知道的淘宝、 京东等。 WebView是android中一个非常重要的控件,它的作用是用来展示web页面。它使用的内核是webkit引擎,4.4版本之后,直接使用Chrome作为内置网页浏览器。 作用: 显示和渲染Web页面 直接使用html文件(网络上或本地assets中)作布局 可和JavaScript交互调用 使用郭霖老师在他书中的简单讲解。 首先先创建一个安卓项目。 在xml中编写如下代码: <LinearLayo

小鹿麋鹿的博客 1915

Python爬虫技术:使用Playwright和Twitter API v2高效获取Twitter/X数据完全教程

遵守规则:始终遵循Twitter的使用条款和速率限制错误处理:实现完善的错误处理和重试机制数据质量:进行数据清洗和验证性能优化:使用异步处理和合理的延迟设置可维护性:模块化代码,便于维护和扩展。

2201_76125261的博客 671

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

WebView常用方法

一、简介 WebView是一个基于webkit引擎、继承自View,用于展现web页面的控件。 Android的Webview在低版本和高版本采用了不同的webkit版本内核,4.4后直接使用了 Chromium。更改后会提升WebView性能,并支持HTML5,CSS3和JavaScript的标准已匹配最新的Web浏览器。 二、使用介绍 WebView类常见方法 WebView工具类WebSe...

coder0408的专栏 1616

怀旧版电脑GBC模拟器

再现原版GBC掌机的界面,电脑运行连游戏界面都一样大小,很怀旧,很真实,(英文版)强烈推荐,很小的文件,很难才找到的。

Android中WebView使用和WebSettings的属性

1. 打开网页时不调用系统浏览器, 而是在本WebView中显示: mWebView.setWebViewClient(new WebViewClient(){ @Override public boolean shouldOverrideUrlLoading(WebView view, String url) { view.loadUrl(u

FynnJason的技术屋 3938

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

WebView基础二:常用方法和常用类

1.WebView的常用方法1.常用方法webVIew.onResume(); //激活WebView为活跃状态,能正常执行网页的响应webView.onPause(); //通过onPause动作通知内核暂时停止所有的动作,比如DOM的解析,plugin的执行,JavaScript的执行webView.pauseTimers() //当应用程序(存在webview)被切换到后台时,这个方法

码可菠萝的博客 1087

webView 属性方法大全

一、初始化与三种加载方式      UIWebView继承与UIView,因此,其初始化方法和一般的view一样,通过alloc和init进行初始化,其加载数据的方式有三种: 第一种: - (void)loadRequest:(NSURLRequest *)request; 这是加载网页最常用的一种方式,通过一个网页URL来进行加载,这个URL可以是远程的也可以是本地的,例如我加载

Star_Monkey的博客 3191

WebView的简单介绍和简答使用

WebView的简单介绍和简答使用 WebView Webview的概念: WebView 是一个用来显示网页的控件,和使用系统其他控件没什么区别, WeView 是微型浏览器。它包含一个浏览器该有的基本功能,例如:前进、后退下一页、搜索、和网页互相调用等功能。 为什么学习Webview???? 最大的优势是迭代方便, 只需要修改服务端网页的代码,Android应用就会同步更新。 WebView的...

SageDeceiveFiend的博客 1170

webView获取html元素的属性

原理: 通过android与js的交互:android端写入js,让js获取元素属性的值并传给android的方法。 三步走: 1、获取属性要在界面加载完毕之后才能去获取: 代码: private WebViewClient webViewClient = new WebViewClient(){ @Override public void onPageF...

侠亦狐的博客 3480

WebView的简单使用以及属性介绍

webview的简单实用

zhaojianyin 534

android WebView常用属性,调起其他app

在android中,经常要加载一些网页,有很属性是常用的,也有很多是必须的,做过笔记备用settings = mIdWebMain.getSettings(); settings.setUseWideViewPort(true);//将图片调整到适合webView的大小 settings.setDefaultTextEncodingName("utf-8");//编...

yinbaoshiguang的博客 1341

Android的WebView的常用设置和方法

1. 打开网页时不调用系统浏览器, 而是在本WebView中显示: mWebView.setWebViewClient(new WebViewClient(){ @Override public boolean shouldOverrideUrlLoading(WebView view, String url) { view.loadUrl(url); return true; }

theKingOfCoding的博客 1183
上一篇: 欢迎使用优快云-markdown编辑器
下一篇: Android和H5(JS)简单交互
ILoveYouWF
博客等级 码龄10年 6粉丝 25原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值