2013-10-14 更新:最近好久没弄android 了,webview的问题其实如果是在android4.0以上的版本,本文说的文本框放大本身是可以通过调整html body的大小来解决的,建议body不写死或者body比webview小。下文所说的办法针对个版本android 都有效,但是实际上使用会很局限,实际上你要先知道html的body大小 和webview的大小来算,并非什么完美解决方法,只在特定情况下适合。
Android WebView 当文本框获取焦点后自动放大,但这种自动放大不是我想要的。这并不是android的bug,而是他的正常处理
这是我最近两个星期面临的一个比较棘手的Bug,目前国内外都没有大牛提供很好的解决方式。这里,我今天花了大半天时间来解决这个问题。
之所以出现这种情况,主要是当文本框获取到焦点后,键盘自动弹出,会执行WebView的displaySoftKeyboard 方法,这个方法会把缩小的网页恢复到正常情况(也就是说缩小的网页放大),但是我目前的项目都是不允许页面缩放的,所以一旦页面放大后就无法恢复。 这里感谢国外的一个朋友的帖子回复
http://stackoverflow.com/questions/3702805/is-there-a-way-to-disable-the-zoom-feature-on-input-fields-in-webview/7214199#7214199 。
不多说,直接上代码,如果想知道原因,看我后续的blog。 <!--EndFragment-->
<!--EndFragment-->
解决原理:
通过反射,拿到WebView的一个私有属性mDefaultScale,并在WebView失去焦点的时候,修改它的值,已达到网页不放大的效果。
view.setInitialScale(???); //???代表随便多少,小于一百才会有我说的这个bug。
<!--EndF-->
解决方案如下:
videoNavigation_WV.setOnFocusChangeListener(new View.OnFocusChangeListener() { @Override public void onFocusChange(View v, boolean hasFocus) { if(hasFocus) { try { Field defaultScale = WebView.class.getDeclaredField("mDefaultScale"); defaultScale.setAccessible(true); //WebViewSettingUtil.getInitScaleValue(VideoNavigationActivity.this, false )/100.0f 是我的程序的一个方法,可以用float 的scale替代 defaultScale.setFloat(videoNavigation_WV , WebViewSettingUtil.getInitScaleValue(VideoNavigationActivity.this, false )/100.0f); } catch (SecurityException e) { e.printStackTrace(); } catch (IllegalArgumentException e) { e.printStackTrace(); } catch (IllegalAccessException e) { e.printStackTrace(); } catch (NoSuchFieldException e) { e.printStackTrace(); } } } });
<!--EndFragmen-->
大家如果想利用我这段代码,我这里面的defaultScale.setFloat(WebView,float),这个float值是你初始化的时候的scale值。跟你的CSS body值有一定的关系。假如body值 是1920*1080 而你现在是显示在1280*720的屏幕上,那么这个scale 的float值就是0.666667。就是你的现在的缩放页面与正常情况先显示的大小的比(缩放比),大家可以用页面第一次加载的时候通过getScale()值获取。
代码还有很多需要优化的地方,比如反射拿属性,其实只要做一次,设置可以做多次,这里只是一个Demo,觉得代码垃圾的话我发个改好的工程给你。
有木有做android TV 的 ,加群87154410,欢迎欢迎。
2013-10-14 对了,加群直接私聊我的,最近比较忙,没时间帮你解决,不好意思,群里也有解决过此类问题的。
相关推荐
android webview input=file 失效解决方案
Android Webview 滑动监听 放大缩小查看网页图片
Android使用WebView获取网页的源码,将WebView封装进ArthurWebView,直接创建并初始化即可使用!
Android通过JS在线用webview加载PDF文件(无限放大版本),支持webview无限放大
Android webview 内存泄露的解决方法 最近在activity嵌套webview显示大量图文发现APP内存一直在涨,没法释放内存,查了很多资料,大概是webview的一个BUG,引用了activity导致内存泄漏,所以就尝试传递...
android webview加载网页获取对应url 参数值的方法(csdn)————程序
Android WebView 去除标题 利用javacript交互
本篇内容主要给大家讲解了Android Webview拦截ajax请求的详细讲解,需要的朋友一起来学习一下。
Android Webview upload 图片上传 ! 导读: Android HTML 打开相册上传照片 ...解决 android webview 在4.4系统上无法使用情况 博客地址 : http://blog.csdn.net/aaawqqq/article/details/51087805
Android中实现WebView点击图片放大显示,完整代码demo。
Android WebView实现自由复制文字
真正实现android webview自身下载文件,并自动保存到SDCARD上,静默下载哦。
Webview 读取网页 里的 所有图片,并实现点击图片 放大查看 功能, 图片集 观看, 图片缩放
Android WebView 新浪微博自动登陆
android webview模拟网页post操作
Android webview 加载网页以及本地资源以及SD资源demo,以及加载缓存资源
在android的实际开发中有时候我们需要将文字和图片一起显示,可以用TextView和ImageView的组合来实现,其实用网页显示更容易,本文介绍android显示含有图片和文字的本地网页html,hml的方法,并支持放大缩小。
Android下WebView加载flash闪白屏问题解决方案源码
Android下使用Webview实现的HTML5视频播放器,播放本地视频时请加载video目录下的1.html