Android-WebView加载网页
WebView可以使得网页轻松的内嵌到app里,还可以直接跟js相互调用。
webview有两个方法:setWebChromeClient 和 setWebClient
setWebClient:主要处理解析,渲染网页等浏览器做的事情
setWebChromeClient:辅助WebView处理Javascript的对话框,网站图标,网站title,加载进度等
WebViewClient就是帮助WebView处理各种通知、请求事件的。
使用WebView需要访问网络权限:
<uses-permission android:name="android.permission.INTERNET"/>
1、加载本地/web资源
example.html 存放在assets文件夹内
webView = (WebView) findViewById(R.id.webView);
webView.loadUrl("file:///android_asset/example.html");//加载本地资源
webView.loadUrl("http://baidu.com");//加载web资源
2、在程序内打开网页
创建一个自己的WebViewClient,通过setWebViewClient关联
webView = (WebView) findViewById(R.id.webView);WebSettings settings = webView.getSettings();//如果访问的页面中有Javascript,则webview必须设置支持Javascriptsettings.setJavaScriptEnabled(true);//WebView加载web资源webView.loadUrl("http://baidu.com");//覆盖WebView默认使用第三方或系统默认浏览器打开网页的行为,使网页用WebView打开webView.setWebViewClient(new WebViewClient(){@Overridepublic boolean shouldOverrideUrlLoading(WebView view, String url) {//返回值是true的时候控制去WebView打开,为false调用系统浏览器或第三方浏览器view.loadUrl(url);return true;}});
3、如果希望浏览的网页后退而不是退出浏览器,需要WebView覆盖URL加载,让它自动生成历史访问记录,那样就可以通过前进或后退访问已访问过的站。
//改写物理按键——返回的逻辑@Overridepublic boolean onKeyDown(int keyCode, KeyEvent event) {if(keyCode == KeyEvent.KEYCODE_BACK){if(webView.canGoBack()){webView.goBack();//返回WebView上一页面return true;} else {finish();//结束当前窗体System.exit(0);//退出程序}}return super.onKeyDown(keyCode, event); }
4、判断页面加载过程
webView.setWebChromeClient(new WebChromeClient() {@Overridepublic void onProgressChanged(WebView view, int newProgress) {// TODO Auto-generated method stubif (newProgress == 100) {// 网页加载完成} else {// 加载中}}
});
5、WebView相关设置
webview = (WebView) findViewById(R.id.webview); WebSettings webSettings = webview.getSettings(); //设置WebView属性,能够执行Javascript脚本 webSettings.setJavaScriptEnabled(true); //设置可以访问文件 webSettings.setAllowFileAccess(true); //设置支持缩放 webSettings.setBuiltInZoomControls(true); webSettings.setSupportZoom(true); //优先使用缓存webSettings.setCacheMode(WebSettings.LOAD_CACHE_ELSE_NETWORK);//不使用缓存webSettings.setCacheMode(WebSettings.LOAD_NO_CACHE);//设置此属性,可任意比例缩放webSettings.setUseWideViewPort(true);webSettings.setLoadWithOverviewMode(true);//支持获取手势焦点webview.requestFocusFromTouch();//加载需要显示的网页 webview.loadUrl("http://www.baidu.com"); //设置Web视图 webview.setWebViewClient(new webViewClient ());
6、通过java代码调用javascript
WebSettings webSettings = mWebView .getSettings(); webSettings.setJavaScriptEnabled(true); mWebView.addJavascriptInterface(new Object() { public void clickOnAndroid() { mHandler.post(new Runnable() { public void run() { webview.loadUrl("javascript:wave()"); } }); } }, "demo");
WebSettings 的常用方法介绍
setJavaScriptEnabled(true); //支持jssetPluginsEnabled(true); //支持插件 setUseWideViewPort(false); //将图片调整到适合webview的大小 setSupportZoom(true); //支持缩放 setDisplayZoomControls(false);//不显示WebView缩放按钮setLayoutAlgorithm(LayoutAlgorithm.SINGLE_COLUMN); //支持内容重新布局 supportMultipleWindows(); //多窗口 setCacheMode(WebSettings.LOAD_CACHE_ELSE_NETWORK); //关闭webview中缓存 setAllowFileAccess(true); //设置可以访问文件 setNeedInitialFocus(true); //当webview调用requestFocus时为webview设置节点webview webSettings.setBuiltInZoomControls(true); //设置支持缩放 setJavaScriptCanOpenWindowsAutomatically(true); //支持通过JS打开新窗口 setLoadWithOverviewMode(true); // 缩放至屏幕的大小setLoadsImagesAutomatically(true); //支持自动加载图片
WebViewClient 的方法全解
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)//重写此方法才能够处理在浏览器中的按键事件。 shouldOverrideUrlLoading(WebView view, String url)
//在点击请求的是链接是才会调用,重写此方法返回true表明点击网页里面的链接还是在当前的webview里跳转,不跳到浏览器那边。这个函数我们可以做很多操作,比如我们读取到某些特殊的URL,于是就可以不打开地址,取消这个操作,进行预先定义的其他操作,这对一个程序是非常必要的。
Android-WebView加载网页相关推荐
- android WebView加载网页白屏问题优化处理
android WebView加载网页白屏问题优化处理 问题描述: 使用webview加载Web界面时,会出现界面白屏的情况.http下通常问题不大,通常https白屏的可能性很大,而且通常没有任何报 ...
- Android WebView加载网页,图片等元素宽度大小不兼容手机屏幕的宽度
无论是Android手机还是iOS手机,使用WebView加载一些没有专门为手机屏幕做适配的网页的时候,就会出现网页中的图片等标签元素的宽度大小和手机屏幕的宽度不一致的情况,如下图 之所以会出现上面的 ...
- android webview加载网页,文字listview和image混合listview的实现
android和ios内置浏览器支持html5,还支持CSS3和js 下面的一个小例子,我来实现android加载html页面.还有两个列表,回顾一下listview的功能.文章内容较浅,没有特别高的 ...
- Android WebView 加载网页只显示空白页不显示网页
Android 在使用WebView控件将网页嵌入应用的时候有时会遇到页面显示不出来或者显示为空白页的情况 我在项目中也遇到了这个问题 , 尝试了很多方法都没有解决问题 ,最终找到了解决方法: Web ...
- android动态设置错误页面,Android中替换WebView加载网页失败时的页面
我们用webView去请求一个网页链接的时候,如果请求网页失败或无网络的情况下,它会返回给我们这样一个页面,如下图所示: 上面这个页面就是系统自带的页面,你觉得是不是很丑?反正小编本人觉得非常丑,很难 ...
- Android WebView 加载https网页白屏,空白解决方案
最近在做一个H5相关的需求,使用WebView加载第三方提供的https网页时显示白屏.但是调试打开Baidu和B站的https网址时就能正常打开.被这个问题困扰了半天. 合作方说是android手机 ...
- webview加载html跳转,WebView加载网页(二)
WebView加载网页(二) 一.实现目标 1.实现一个页面activity_main.xml,该页面上面有一个TextView和两个WebView,一个WebView显示百度首页,另一个WebVie ...
- android 双 webview,Android webview加载页面
释放双眼,带上耳机,听听看~! Android webview加载页面 private WebView webView; public void init() { webView = (WebView ...
- android webView加载网络视频
之前,我写过webView加载本地网页的博客,今天,就写写webView加载网络视频的内容. 一.加载网页 1.WebView用来显示网页,使用必须时刻注意我们需要添加网络权限 <uses-pe ...
- android webview 太大,Android应用开发之Android WebView加载图片显示过大的处理教程(代码教程)...
本文将带你了解Android应用开发Android WebView加载图片显示过大的处理教程(代码教程),希望本文对大家学Android有所帮助. Webview加载图片时,经常会遇到图片显示不符合 ...
最新文章
- 清华大学矣晓沅:“九歌”——基于深度学习的中国古典诗歌自动生成系统
- Java Nashorn--Part 3
- boost::mpl模块BOOST_MPL_ASSERT_MSG相关的测试程序
- Django 模板语言 标签
- Spring Boot 1:Introduction
- jdk 安装_Linux入门之Linux CentOS安装jdk
- iPhone又降价了!京东、苏宁安排上了 iPhone XS系列最高直降1700元
- 近似推断---变分线性回归
- selenium的定位方式
- 计算机无法进系统咋办,详解电脑无法进入系统怎么办
- 求解偏微分方程开源有限元软件deal.II学习--Step 48
- Altium Designer 09简易教程(一)
- 【华为灰度管理法】之读书思维导图及感想分享
- C/S与P2P的主要区别以及相同点
- python中的f函数_05-python中函数的使用
- 通过Matlab实现离散序列卷积和
- [阅读笔记] 联邦学习攻防综述 An Overview of Federated Deep Learning Privacy Attacks and Defensive Strategies
- 心法利器[53] | 数据增强的现实应用思考
- 安卓期末大作业——番茄小说APP
- Excel技巧【标记多行数据连续一样的行】【第一个单元格公式适用于所有本列所有行】【按照逗号分列】【快速统计出各个项出现的次数】【冻结窗口】[表格分段选择数据][根据单元格内容引索其他单元格数据指针]
热门文章
- 如何为Matlab添加自己喜欢的字体
- 2021-10-02
- python制作动画的软件_分享7个好用的动画制作软件,学会它,人人可以成为动画大师...
- android屏幕适配之点9图片
- 文秘类计算机,文秘类包括哪些专业
- 基于Python的多元线性回归分析
- android:completionthreshold=1,android:completionThreshold=1是哪个组件的属性( )
- jieba提取关键词时筛选词性时单词性选择的一点注意事项
- 分频电路的verilog实现
- overhit用户服务器维护,overhit新手引导任务小技巧