解决小米系统下ViewPager、ScrollView内嵌套WebView时,Touch事件不响应的问题

前言:一直拿原生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稍微上下滑动一点点即可。

时间: 2024-11-03 22:09:43

解决小米系统下ViewPager、ScrollView内嵌套WebView时,Touch事件不响应的问题的相关文章

ScrollView内嵌套ListView时的显示与滑动问题

最近的项目中遇到了SrcollView内嵌ListView的需求,要求ListView内容全部展示,但是实际效果ListView却只显示了一行,一开始以为是代码异常了,只生成了一行视图,实际上就是SrcollView和ListView的冲突问题.解决办法就是禁止ListView的滑动. 一.自定ListView,其实就是包了一层处理而已,很简单. package com.hundsun.bridge.view; import android.content.Context; import and

【转】MyEclipse第一个Servlet程序 --解决Win7系统下MyEclipse与Tomcat连接问题

MyEclipse第一个Servlet程序 --解决Win7系统下MyEclipse与Tomcat连接问题 前言 本文旨在帮助学习java web开发的人员,熟悉环境,在Win7系统下运行自己的第一个Servlet程序,因为有时候配置不当或系统原因可能会运行不成功,这给初学者带来了一定烦恼,我也是为此烦恼过几小时.现手把手介绍利用MyEclipse,连接tomcat服务器,建立自己的第一个Servlet程序.java web开发相关的理论及其他知识在此处未做讨论.文章末尾给出了一些常见错误的解决

解决Ubuntu系统下 mysql 远程连接失败的问题 ERROR 2003 (HY000): Can't connect to MySQL server on 'xxx.xxx.xx.xx' (110)

如果远程连不上mysql.cnf 里面也修改了:bind注销掉了127.0.0.1 等所有的 但是telnet xxx.xxx.xx.xx 3306 端口 不通:那么 就是防火墙的问题了 1.修改Ubuntu系统防火墙规则 [[email protected] ubuntu]#vim /etc/iptables.rules 解决Ubuntu系统下 mysql 远程连接失败的问题 ERROR 2003 (HY000): Can't connect to MySQL server on 'xxx.x

如何解决英文系统下安装中文软件显示乱码问题?

如何解决英文系统下安装中文软件显示乱码问题? ?Lander Zhang 专注外企按需IT运维服务,IT Helpdesk 实战培训践行者博客:https://blog.51cto.com/landerIT Helpdesk 工程师实战培训课程:https://edu.51cto.com/lecturer/733218.html轻松进外企:IT Helpdesk工程师实战自学之路:https://blog.51cto.com/lander/2413018更新时间:2019/10/28 故障描述

解决linux系统下因分区目录划分过小,导致tomcat使用系统临时文件夹(/tmp)没有足够空间而报错的问题

1. 故障现象. B/S应用进行文件上传后,系统反馈:没有足够的磁盘空间(No enough space available). 2. 故障分析 检查文件占用情况如下: [root@Qa2 /]# df -h Filesystem Size Used Avail Use% Mounted on /dev/mapper/centos-root 6.7G 6.7G 20k 100% / devtmpfs 7.8G 0 7.8G 0% /dev tmpfs 7.8G 0 7.8G 0% /dev/sh

解决Linux系统下Mysql数据库中文显示成问号的问题

当我们将开发好的javaWEB项目部署到linux系统上,操作数据库的时候,会出现中文乱码问题,比如做插入操作,发现添加到数据库的数据中文出现论码,下面就将解决linux下mysql中文乱码问题! 打开Linux窗口,启动mysql. 连接mysql输入show variables like '%char%'; 出现如下图,这样的话在linux下操作mysql会出现中文乱码,所以我们要解决这个问题. 关闭mysql,找到 /etc/my.cnf 文件 3.1 如果没有找到my.cnf文件,就从

ScrollView中嵌套ListView时,listview高度显示的问题

方法一:直接更改listview的控件高度,动态获取(根据条目和每个条目的高度获取) 前几天因为项目的需要,要在一个ListView中放入另一个ListView,也即在一个ListView的每个ListItem中放入另外一个ListView.但刚开始的时候,会发现放入的小ListView会显示不完全,它的高度始终有问题.上网查了下,发现别人也有遇到这样的问题,而大多数人都不推荐这样的设计,因为默认情况下Android是禁止在ScrollView中放入另外的ScrollView的,它的高度是无法计

解决linux系统下python中的matplotlib模块内的pyplot输出图片不能显示中文的问题

问题: 我在ubuntu14.04下用python中的matplotlib模块内的pyplot输出图片不能显示中文,怎么解决呢? 解决: 1.指定默认编码为UTF-8: 在python代码开头加入如下代码 import sys reload(sys) sys.setdefaultencoding('utf-8') 2.确认你ubuntu系统环境下拥有的中文字体文件: 在终端运行命令"fc-list :lang=zh",得到自己系统的中文字体 命令输出如下: /usr/share/fon

解决windows系统下ping,ipconfig不是内部或外部命令

一般情况下,都是误删了系统变量path的值.解决方法:右击我的电脑 → 选择属性 → 选择高级系统设置 → 环境变量 → 在系统变量列表中,找到"path"环境变量双击,打开.在变量值这一栏检测下是否有下面的信息(%SystemRoot%\system32;%SystemRoot%;%SystemRoot%\System32\Wbem),确定没有的情况下,复制拷贝,最后点击"确定". →  ping,ipconfig等命令行可以使用了 (1)ping,ipconfi