标签:des android style blog http color io 使用 ar
前言:一直拿原生android4.4的Nexus5测试,结果装到老大的小米上,出了bug。安卓的兼容性问题真是....难以形容。
Bug详细描述:本人用webview运行JS Goole地图,单独使用该webview时一切正常,而当放在scrollview和viewpager下,小米手机上便无法移动地图,其他手机是没问题的。
解决方案:
一、ScrollView内嵌套WebView
作为一个新手,我简单的检查了viewpager和scrollview的三个函数(dispatchTouchEvent、onInterceptTouchEvent、onTouchEvent)的返回值,貌似小米和其他手机都没有有区别。
看了一篇关于“touch事件传递机制”的帖子(传送门http://www.xuebuyuan.com/610044.html ),我试验了Demo之后,终于发现了问题的所在。
小米的ScrollView会屏蔽掉它所有子View的上下手势,它将给子View MotionEvent.ACTION_CANCEL事件,这样会导致后续的MotionEvent事件都只传递到ScrollView截止。
于是我将onInterceptTouchEvent的返回值改为false,这里大家肯定会很奇怪好像前面说的跟这里的解决方法对不上,这里我没深入研究,初步猜测是小米系统改了原生ScrollView的onInterceptTouchEvent函数代码,使得传递到子View的MotionEvent事件变成了MotionEvent.ACTION_CANCEL。
二、ViewPager内嵌套WebView
本以为解决了前一个问题,这个问题应该是类似的,结果没有用处。很奇怪,ViewPager和WebView的所有与TouchEvent相关的函数,在小米和其他机子上打印出来的结果是完全一致的。
好吧,仔细看看,还是发现了不同,小米的Log多出了一个错误:Should not happen: no rect-based-test nodes found。
百度之后,参考了http://blog.csdn.net/rambomatrix/article/details/22503077 解决方案。
原来是因为viewpager在切换页面的时候,fragment中的webview没有监测到自己处于可见状态。因此,当你发现webview应该处于visible状态的时候就让它动一下,进而告知webkit来准备响应。
于是用代码让webview稍微上下滑动一点点即可。
解决小米系统下ViewPager、ScrollView内嵌套WebView时,Touch事件不响应的问题
标签:des android style blog http color io 使用 ar
原文地址:http://blog.csdn.net/qq454822252/article/details/39526681