Android WebView一系列
来源:互联网 发布:矩阵论 pdf 编辑:程序博客网 时间:2024/05/29 18:58
1、禁用滚动条后,仍然可以向下触摸滑动或仍然可以通过向下方向键出现滚动效果,如何解决该问题?
目前通过WEBVIEW属性设置(禁用滚动条、设置滚动模式、重新拓传滚动Range范围),你是无法做到的,目前可以通过两种方式来实现:
(1)监听WV的按键响应,对方向键的处理后return true,将该层事件消耗掉,不在传递给Activity级处理即可。
(2)修改WV的内核……
2、机顶盒中对移动光标的处理
默认情况下,WV对网页有默认的焦点与移动处理,但是往往移动的顺序不是那么理想,而且一般情况下我们需要将WV设置为“软件图层类型”,以禁用硬件加速。
同时该模型也是将WV设置为可透明背景的一个途径,但是设置为该类型后,会把当前WV界面转为bitmap保存,这使得通过遥控器按键进行页面移动时,
无任何焦点和光标出现,因此可通过以下两种方式来解决:
(1)修改webcore内核,进行移动光标的自定义处理,包括计算页面元素位置、尺寸、大小等
(2)自定义JS光标系统
(3)通过JS进行简洁化的移动与聚焦处理
3、背景透明处理,通常用于WV自身以及WV之外ACTIVITY级的叠加显示效果
wv.setLayerType(View.LAYER_TYPE_SOFTWARE, null);wv.setBackgroundColor(Color.TRANSPARENT);// mWebView.setBackgroundResource(Color.TRANSPARENT);if (wv.getBackground() != null) {wv.getBackground().setAlpha(2);}4、WV进入后台时性能优化
重写WV:
@Overrideprotected void onWindowVisibilityChanged(int visibility) {super.onWindowVisibilityChanged(visibility);if (visibility == View.GONE) {try {WebView.class.getMethod("onPause").invoke(this);// stop flash} catch (Exception e) {}Logger.d(TAG, "pause webview timers.");this.pauseTimers();this.is_gone = true;} else if (visibility == View.VISIBLE) {try {WebView.class.getMethod("onResume").invoke(this);// resume flash} catch (Exception e) {}Logger.d(TAG, "resume webview timers.");this.resumeTimers();this.is_gone = false;}}@Overrideprotected void onDetachedFromWindow() {if (this.is_gone) {try {this.destroy();} catch (Exception e) {}}}
注意,如果调用Activity的finish方法,onDetachedFromWindow方法会被触发。
同时对话框的dismiss也会被触发,因此在webview上弹出原生对话框,需对dismiss进行状态判断。
5、ACTIVITY级的按键事件上传到WV需要做一个转义处理,通常有上下左右、确定等,包括一些其他的系统按键
6、WV缓存设置,缓存是基于MD5值校验的资源文件缓存、HTML5缓存等
settings.setCacheMode(WebSettings.LOAD_DEFAULT);// set local storagesettings.setDomStorageEnabled(true);// set app databasesettings.setDatabaseEnabled(true);// H5缓存settings.setAppCacheEnabled(true);
WebSettings.LOAD_CACHE_ELSE_NETWORK---只要本地有,无论是否过期都使用缓存数据;只要打开过一次就使用缓存数据
WebSettings.LOAD_CACHE_ONLY---只使用缓存
WebSettings。LOAD_NO_CACHE---不使用缓存
WebSettings.LOAD_DEFAULT---控制器决定是否从网络获取数据,无论如果都从网络获取数据,没有网络就报错
7、最新的SDK中,适当控制页面调用的安全性设置,谨慎添加@JavascriptInterface 接口注册
8、根据需要可对WV中显示的prompt、alert、confirm消息进行定制
9、善用WV的页面初始化、shouldover时机
10、webview的拉伸
尝试过对webview进行强制拉伸,通过下面的方式进行,目前看来不是很理想:
1) 启用浏览器缩放功能与缩放控件支持
2) 启用用户自定义缩放支持,该缩放仅可设置缩放的比率,放大、缩小的指定倍数
3) 通过html meta viewpoint来控制
viewpoint也仅仅支持等比率缩放,viewpoint的相关信息可参阅:http://www.szfangwei.cn/news/1962.html、
http://yansu.org/2013/05/06/the-viewpoint-metatag.html
我想如果是网页图片做强制拉伸是木有问题的,但是网页是动态的,除非把网页视图即时动态的生成为可以显示的位图。
而后通过以下的尝试:
将需要展现的网页HTML抓取到本地,然后对HTML进行正则批量替换,将所有px像素值经过换算后,替换为适配目前屏幕的像素值,然后显示到网页上,也还是有些问题:
1) 网页点击的JS事件会失效,硬伤
2) 如果采用相对路径,则通过以上方式加载页面,需指定页面涉及到的资源信息基地址,目前每个看吧的资源信息路径都是不同的,不好统一。
因此可以考虑通过下面的方式来实现:将需要拉伸的小页面完整的等比缩放后居中显示,但这样左右两侧会留有空白,补上背景图即可。
11、WebView加载慢
载入网页显示速度慢的究极解决方案:http://gaibing2009.diandian.com/post/2012-08-07/40035127817
- Android WebView一系列
- Android WebView一系列
- 拦截webview上的请求,进行一系列操作
- 【Android】【Webview】WebView 简介
- android WebView
- Android WebView
- Android WebView
- android webview
- Android WebView
- android WebView
- android WebView
- Android webview
- android webview
- android webview
- Android WebView
- Android WebView
- android WebView
- android webview
- 70 阶乘因式分解(二)
- IPSEC_TNCFG(8) - 操作KLIPS虚拟接口
- HANA中的SQL&SQLScript&Procedure
- Spring与SpringMVC 容易忽略的context:component-scan配置
- 消除浏览器中的图片默认间隙
- Android WebView一系列
- c++中字符输入函数getline、cin.getline区分
- 动态规划-dp
- Chapter 4 | Trees and Graphs--判断有向图两节点之间是否存在路径
- 【数据挖掘导论】——数据类型
- uva 11524 InCircle 内切圆(计算几何)
- 对vector等STL标准容器进行排序操作
- 正则表达式学习
- 详细解析如何做一款成功的APP应用