安卓事件传递问题

出现一个很困扰的问题。
当我滑动侧边栏更改主页面的viewgroup之后,更改完毕的viewgroup中控件的点击事件失效了。
只有当我滑动侧边栏再滑动一点之后才能够“激活”,该viewgroup中的控件才能够被点击。
在8.0的系统中没有这个问题,7.0或以下却有这个问题。
在我debug来看,当事件从侧边栏传递进去到主页面viewgroup的时候,主页面viewgroup并没有拦截事件,却出现事件的回传,也就是子控件或者子view并没有消费事件,更大可能是没有了子view。
但在8.0的系统中,这个事件切实地被子view消费,当事件是Up的时候就会触发子view的监听方法。

这个问题要怎么解决?

红色的标记是我期望的事件传递

详细流程:
红色的标记是我期望的事件传递,但事件传递到SlideMenu中,然后再传递到Mylineralayout的onInterceptTouchEvent方法之后,明明是返回false,理应传递到我点击的button中,但是事件却回传会到Mylineralayout的onTouchEvent中,导致这个事件down之后的事件up在Mylineralayout的onTouchEvent中自行处理触发不了Button的onclick事件。

在8点0的系统中却是不存在这个问题。当我点击SlideMenu的item更换Mylineralayout中的布局,这些布局中的控件是能够被我点击的。在7点0或以下的系统的却需要我滑动一点点SlideMenu之后事件传递才会正常。

回答:

事件的传递会始终遵守:Activity -> ViewGroup -> View这样的分发顺序,事件消费拦截相关想必你已经清楚了,既然出现这样的问题。说明父子关系发生了改变,尝试用HierarchyViewer + Debug查看是否确实在7.0和8.0机型上视图嵌套出现了不一致的情况。如果确实一致,8.0是否使用了测试版本,测试版本可能存在一些Bug。

以上是 安卓事件传递问题 的全部内容, 来源链接: utcz.com/p/171287.html

回到顶部