android创建webview,Android Webview总结
这些都是曾经收集到的一些关于Webview的知识,有些工作中用到了,有些暂时还没有用到,这次统一整理下,希望对自己,对大家有所帮助。另外,欢迎大家补充(当然,有错也要指正呀,不胜感激),如果可以的话,我会 更新到本帖中。
一.权限
二.创建Webview对象
WebView webview = new WebView(this);
三.加载网页的方式
loadData(String data, String mimeType, String encoding)
des:Load the given data into the WebView.
as:
String summary = "
You scored 192 points.";
webview.loadData(summary, "text/html", null);
loadDataWithBaseURL(String baseUrl, String data, String mimeType, String encoding, String historyUrl)
des:Load the given data into the WebView, use the provided URL as the base URL for the content.
loadUrl(String url)
des:Load the given url.
as: webView.loadUrl("http://www.jianshu.com/"); //加载网络网页
webView.loadUrl("file:///android_asset/html/index.html"); //加载本地assert目录下网页
webView.loadUrl("content://com.Android.htmlfileprovider/sdcard/kris.html"); // 加载SD卡html
loadUrl(String url, Map extraHeaders)
Load the given url with the extra headers.
postUrl(String url, byte[] postData)
des: Loads the URL with postData using "POST" method into this WebView.
利用Intent调用系统浏览器
Uri uri = Uri.parse("http://www.jianshu.com/");
Intent intent = new Intent(Intent.ACTION_VIEW, uri);
startActivity(intent);
四.设置Webview
webView.clearHistory();
webView.clearCache(true);
webView.clearFormData();
webView.setScrollBarStyle(WebView.SCROLLBARS_OUTSIDE_OVERLAY);// 隐藏滚动条webView.requestFocus();
webView.requestFocusFromTouch();
五.Webview辅助类
1>WebSettings
设置WebView的一些属性、状态等,例如允许使用javascript,允许使用缓存,允许使用内置的缩放组件,设置支持IS等。
获取WebSettings对象:
WebSettings mWebSettings = webView.getSettings();
For Example
WebSettings mWebSettings = webView.getSettings();
mWebSettings.setJavaScriptEnabled(true);// 支持JS
mWebSettings.setJavaScriptCanOpenWindowsAutomatically(true);//支持通过js打开新的窗口
mWebSettings.setRenderPriority(WebSettings.RenderPriority.HIGH);//提高渲染等级
mWebSettings.setBuiltInZoomControls(false);// 设置支持缩放
mWebSettings.setDomStorageEnabled(true);//使用localStorage则必须打开
mWebSettings.setBlockNetworkImage(true);// 首先阻塞图片,让图片不显示
mWebSettings.setBlockNetworkImage(false);// 页面加载好以后,在放开图片:
mWebSettings.setSupportMultipleWindows(false);// 设置同一个界面
mWebSettings.setBlockNetworkImage(false);
mWebSettings.setCacheMode(1);
mWebSettings.setNeedInitialFocus(false);// 禁止webview上面控件获取焦点(黄色边框)
2>WebViewClient
主要帮助WebView处理各种通知、请求事件(例如,点击链接时候如何显示界面,页面开始加载,加载完毕之后有何动作等)
webView.setWebViewClient(new WebViewClient() {
@Override
public void onPageStarted(WebView view, String url, Bitmap favicon) {
//页面开始加载时
super.onPageStarted(view, url, favicon);
}
@Override
public void onPageFinished(WebView view, String url) {
//页面加载结束时
super.onPageFinished(view, url);
}
@Override
public void onReceivedError(WebView view, int errorCode, String description, String failingUrl) {
super.onReceivedError(view, errorCode, description, failingUrl);
// 这里进行无网络或错误处理,具体可以根据errorCode的值进行判断,
}
@Override
public boolean shouldOverrideUrlLoading(WebView view, String url) {
view.loadUrl(url);
/**
* 网页跳转:
* 1.在当前的webview跳转到新连接
* view.loadUrl(url);
* 2.调用系统浏览器跳转到新网页
* Intent i = new Intent(Intent.ACTION_VIEW);
* i.setData(Uri.parse(url));
* startActivity(i);
*/
return true;
}
});
3>WebChromeClient
辅助WebView处理Javascript的对话框、网站图标、网站Title、加载进度等
webView.setWebChromeClient(new WebChromeClient() {
@Override
public void onProgressChanged(WebView view, int newProgress) {
// 获得网页的加载进度 newProgress为当前加载百分比
super.onProgressChanged(view, newProgress);
}
@Override
public void onReceivedTitle(WebView view, String title) {
// 获取网页的title,客户端可以在这里动态修改页面的title
// 另外,当加载错误时title为“找不到该网页”
super.onReceivedTitle(view, title);
}
});
六.与JS交互addJavascriptInterface
前提
mWebView.getSettings().setJavaScriptEnabled(true);
使用
mWebView.addJavascriptInterface(new JSInterface(), "jsInterface");
JSInterface对象:
public class JSInterface {
@JavascriptInterface
public void methodA() { }
@JavascriptInterface
public void methodB(String webMessage) { }
}
注意:
1.JavascriptInterface是4.2版本google新增的一个注解,为了避免一个安全隐患,详细信息及4.2以下系统版本适配看这里:Android WebView的Js对象注入漏洞解决方案;另外,safe-java-js-webview-bridge这个开源项目完全用onJsPrompt() 替代了addJavaScriptInterface(),有兴趣的可以学习。
2.JS调用Java:
window.js_callback.viewPicOnJavascript($('article img').index(this));
3.客户端调用JS
mWebView.loadUrl("javascript:alert()");
七.键盘
webview是否可以返回到上一页面 webView.canGoBack()
webview返回到上一页面 webView.goBack();
webview是否可以前进 webView.canGoForward()
webview前进 webView.goForward();
public boolean onKeyDown(int keyCode, KeyEvent event) {
if ((keyCode == KeyEvent.KEYCODE_BACK) && mWebView.canGoBack()) {
mWebView.goBack();
return true;
}
return super.onKeyDown(keyCode, event);
}
八.其他
WebViewFragment
好吧,之前确实不知道有这么个东东,今天写这篇贴子的时候才发现的,看名字,应该是在Fragment里对Webview的封装,应该是个好东西。有兴趣的小伙伴们 点进来:WebViewFragment
WebView cookies清理
CookieSyncManager.createInstance(this);
CookieSyncManager.getInstance().startSync();
CookieManager.getInstance().removeSessionCookie();
屏蔽长按事件
webView.setOnLongClickListener(new View.OnLongClickListener() {
@Override
public boolean onLongClick(View v) {
return true;
}
});
Webiew保留缩放功能但是隐藏缩放控件(这是一招必杀技)
webView.getSettings().setSupportZoom(true);
webView.getSettings().setBuiltInZoomControls(true);
webView.getSettings().setDisplayZoomControls(false);
// setDisplayZoomControls是在Android 3.0中新增的API.,调用此方法前需要对系统版本进行判断
判断Webview是否滑动到顶部或底部
if (webView.getContentHeight() * webView.getScale() == (webView.getHeight() + webView.getScrollY())) {
// 处于底端
}
if(webView.getScrollY() == 0){
//处于顶部
}
des:
getScrollY() //方法返回的是当前可见区域的顶端距整个页面顶端的距离,也就是当前内容滚动的距离.
getHeight()或者getBottom() //方法都返回当前WebView这个容器的高度
getContentHeight()返回的是整个html的高度,但并不等同于当前整个页面的高度,因为WebView有缩放功能,所以当前整个页面的高度实际上应该是原始html的高度再乘上缩放比例
Thank you and have a nice weekend!
android创建webview,Android Webview总结相关推荐
- android 创建选项卡,Android用Fragment创建选项卡
本文结合之前的动态创建fragment来进行一个实践,来实现用fragment创建一个选项卡 项目布局 xmlns:tools="http://schemas.android.com/too ...
- android 创建图片,[Android]创建图片
Android开发中经常需要创建图片,而且从表现上来说,图片信息往往比文字信息更直观,更容易被人理解.所以创建图片的方法还是需要掌握的比较透彻,不应该像刚学Android开发一样--从别的地方复制过来 ...
- android创建layout,Android 创建不同的layout
为了针对不同的屏幕去优化用户体验,我们需要为每一种将要支持的屏幕尺寸创建唯一的XML文件.每一种layout需要保存在相应的资源目录中,目录以-为后缀命名.例如,对大尺寸屏幕(large screen ...
- Android 创建,删除,检测桌面快捷方式
2019独角兽企业重金招聘Python工程师标准>>> 参考 Android 创建快捷方式 Android 快捷方式动画 创建桌面快捷方式需权限 <uses-permissio ...
- Android:控件WebView显示网页
WebView可以使得网页轻松的内嵌到app里,还可以直接跟js相互调用. webview有两个方法:setWebChromeClient 和 setWebClient setWebClient:主要 ...
- php webview,Android:控件WebView显示网页 – tinyphp – 博客园
WebView可以使得网页轻松的内嵌到app里,还可以直接跟js相互调用. webview有两个方法:setWebChromeClient 和 setWebClient setWebClient:主要 ...
- WebView的使用之Android与JS通过WebView互调方法
WebView的使用之Android与JS通过WebView互调方法 一.概述: Android与JS通过WebView实现交互,实际上是: Android调用JS的代码: JS调用Android的 ...
- Android WebView(一) WebView详解
WebView,在Android开发中,我们总是会遇到,它是Google封装的,使用WebKit渲染引擎加载显示网页.接下来,我们就详细看看WebView的介绍以及使用.如果你想了解WebView主要 ...
- WebView深究之Android是如何实现webview初始化的
webview初始化 关注Android加载webview内核的过程.我们从WebView的init过程中切入. WebView的构造方法,最终都会调用 WebView(Context context ...
最新文章
- ADAS系统长篇综述(下)
- ISA SERVER日志存放SQL SERVER中
- win10 rabbitMQ的安装与测试
- aaaaaaaaaaa
- 利用yarn capacity scheduler在EMR集群上实现大集群的多租户的集群资源隔离和quota限制...
- kvmweb管理工具_KVM web管理工具——WebVirtMgr(一)
- Linux路由应用-使用策略路由实现访问控制
- 安装使用 superset
- MCU破解技术分析(一)
- Android API 中文 (53) —— BaseAdapter
- Excel按某一列排序
- presto cube等复杂聚合函数
- 【转】聚类——GMM
- (附源码)springboot教材订购系统的开发毕业设计081419
- 游戏中的镜头语言和应用
- 关于列columns的一些配置
- Android实现应用内多语言切换
- dz邮箱验证怎么设置_详细步骤!Discuz如何设置通过 SOCKET 连接 SMTP 服务器发送(支持 ESMTP 验证)实现论坛邮箱验证功能...
- Word制作三线表格并插入公式
- 学习笔记(01):【孙伟老师UID课堂】设计师也能会的-WEB前端入门基础HTML+CSS视频教程-09综合表单标签讲解-1...
热门文章
- 详解flex布局(flexbox)完整指南
- tomcat-安装版.exe 服务器的下载与安装
- 观澜放马埔旧村片区城市更新单元规划(草案)的公示
- java 开发双十一大屏幕_2019最赞的大屏可视化,一定是这款双十一的酷屏
- 2021冬-不靠谱的老板-使用 Siri 运行快捷指令
- 暨阳学院2022年绍兴市赛校内选拔赛(题解)
- centos备份远程mysql数据库,CentOS Linux自动备份MySQL数据库到远程FTP服务器并删除指定日期...
- 测试计算机办公软件应用,计算机应用和Office办公软件测试题
- mapReduce:网站日志分析项目案例:数据清洗
- 苹果手机如何进行语音转文字的操作?