WebWalker

阅读-思考-实践-总结

Android WebView一系列

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:

@Override
	protected 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;
		}
	}

	@Override
	protected 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 storage
		settings.setDomStorageEnabled(true);
		// set app database
		settings.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

 

 

 

 


 

阅读更多
版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/webwalker/article/details/38079527
文章标签: Android WebView
个人分类: Android
想对作者说点什么? 我来说一句

Android webview flash

2011年01月11日 577KB 下载

WebView控件基本使用 Android

2011年08月31日 22KB 下载

android webView 资料

2011年05月10日 607KB 下载

android webveiew js调用

2016年07月12日 8.96MB 下载

AndroidWebView交互

2016年10月13日 24.51MB 下载

android webview学习记录

2011年05月17日 133KB 下载

AndroidWebView与HTML+Javascript的交互

2017年10月18日 19.95MB 下载

Android WebView实现视频全屏

2014年08月25日 84KB 下载

android webview

2013年10月19日 40KB 下载

android webview richeditor

2015年09月10日 1.49MB 下载

没有更多推荐了,返回首页

不良信息举报

Android WebView一系列

最多只允许输入30个字

加入CSDN,享受更精准的内容推荐,与500万程序员共同成长!
关闭
关闭