2011-01-07 97 views
1

我有一个ListActivity显示WebView s。
有一个菜单选项来复制将在可见的WebView上调用this的文本。
除了一件事以外,一切都有效。我不能在垂直方向上执行文本选择,因为ListView消耗相应的MotionEvent s用于它自己的滚动。
我已经试过这样:临时绕过ListView滚动

@Override 
public boolean dispatchTouchEvent(MotionEvent ev) { 
    if (webViewsInTextSelectionMode) { 
     bypassEventToWebViews(ev); 
     return true; 
    } else { 
     return super.dispatchTouchEvent(ev); 
    } 
} 

这将阻止滚动的,但也将通过调整前MotionEvent坐标到WebView
有没有办法在这种情况下正确防止ListView滚动?

回答

2

这是一个在黑暗中完整的镜头,很可能无法正常工作,但可能值得一试。您可以尝试拨打ViewParent#requestDisallowInterceptTouchEventViewGroup(包含您的WebView)内的父ListView。每次在文本选择期间发生向下移动事件时,您都必须调用它。这是因为标志在上/取消动作事件中被重置。

如果这不起作用,您可能需要创建自己的ListView副本并进行相应的修改。这并不令人望而生畏,您必须将类层次结构中的所有类复制回AdapterView并修复复制的AdapterView类(主要使用具有protected/public访问器函数的私有/包级别成员变量)。

+0

`requestDisallowInterceptTouchEvent()`是答案。谢谢! – yanchenko 2011-01-07 17:16:41

+0

也为我工作 - 只是让谷歌知道 - 我试图禁用ListView滚动同时向右(或左)滑动一排。 滚动干扰刷卡并取消它 - 所以在滑动时不允许拦截触摸事件(向下/移动事件)做了诀窍 - 它现在完美了! 谢谢! – baraka 2015-07-06 08:56:10

4

我有一个显示WebView的ListActivity。

这不是一个好主意。 WebViewListView将竞争运动事件。在滚动事物中放置滚动事物在Android中很少是可取的,特别是当它们可以以相同方向滚动时(在这种情况下,上下滚动)。

有一个菜单选项来复制将在可见的WebViews上调用此文本的文本。

如果您的意思是在该问题上接受的答案,那也不是一个好主意。我对另一个答案是可疑的,但至少这不是一个坏主意prima facia

除了一件事以外,一切都有效。我无法在垂直方向上执行文本选择,因为ListView为自己的滚动消耗相应的MotionEvents。

我的观点正好。

有没有一种方法来正确防止ListView在这种情况下滚动?

我反而集中于摆脱WebViews,具有TextViewHtml.fromHtml()替换它们。或者,摆脱ListView,使用一个WebView来呈现您的合并内容。