2011-01-07 10 views
1

ListActivityにはWebViewが表示されています。
表示可能なWebViewにthisを呼び出すテキストをコピーするためのメニューオプションがあります。
1つのこと以外はすべて動作します。 ListViewはそれ自身のスクロールのために対応するMotionEventを消費するので、私は垂直方向のテキスト選択を実行できません。
私はこれを試してみた:ListViewのスクロールを一時的に回避する

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

スクロールをブロックしますが、またWebViewに未調整MotionEvent座標を渡しますどの。
ListViewがこの場合にスクロールするのを正しく防止する方法はありますか?

答えて

2

これは暗闇の中の完全なショットであり、おそらく動作しませんが、おそらく試してみる価値があります。 WebViewが含まれているViewGroupの親ListViewViewParent#requestDisallowInterceptTouchEventと電話をかけることができます。テキストを選択している間、動きのあるイベントがあるたびに呼び出す必要があります。これは、フラグがアップ/キャンセルモーションイベントでリセットされるためです。

これでうまくいかない場合は、ListViewの独自のコピーを作成し、適切に修正する必要があります。これはあまりにも難しいことではなく、クラス階層のすべてのクラスをAdapterViewにコピーし、コピーされたAdapterViewクラスを修正する必要があります(主にprotected/publicアクセサ関数を持つプライベート/パッケージレベルメンバ変数の使用)。

+0

'requestDisallowInterceptTouchEvent()'が答えです。ありがとう! – yanchenko

+0

私のために働いた - ちょうどgoogleを知らせる - 私は行に右(または左)をスワイプしながらListViewのスクロールを無効にしようとしていた。 スクロールがスワイプを妨害してキャンセルしました。スワイプ中にインターセプトタッチイベントを許可しないようにしました(ダウン/ムーブイベント)。 ありがとうございます! – baraka

4

WebViewを表示するListActivityがあります。

これはお勧めできません。 WebViewおよびListViewは、モーションイベントのために競合します。 Androidで、特に同じ方向(この場合は上下)にスクロールすることができる場合、スクロールするものをスクロールすることはほとんどお勧めできません。

表示可能なWebViewでこれを呼び出すテキストをコピーするメニューオプションがあります。

あなたがその質問に関する受け入れられた回答を意味する場合は、それも良い考えではありません。私は他の答えについて疑念を抱いていますが、少なくともそれは悪い考えではありませんprima facia

1つのこと以外はすべて動作します。 ListViewは、それ自身のスクロールのために、対応するMotionEventを消費するので、垂直方向のテキスト選択は実行できません。

正確に私のポイント。

この場合、ListViewがスクロールしないようにする方法はありますか?

私はTextViewHtml.fromHtml()に置き換える、WebViewsを取り払うことに代わりに焦点を当てます。または、を取り除き、単一のWebViewを使用して統合コンテンツをレンダリングします。

+0

私が一からそれをやらなければならないとすれば、私は単一の 'WebView'に行きます。それでも、API 8以降に公開されている 'emulateShiftHeld()'を使用してください。 – yanchenko

+0

+1はしないでください。 – Falmarri

関連する問題