2011-01-07 62 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來呈現您的合併內容。