Close

GestureDetectorからコンテキストメニューを表示する

GestureDetectorを利用してスクロールを実現している Viewにおいてコンテキストメニューを表示しようと registerContextMenu(…)を試してみた…ドラッグ中にコンテキストメニューが表示されてしまう…_no
Viewと GestureDetectorがそれぞれ独自に長押しの判定を行っているのが原因であろう事は容易に想像が付いたので GestureDetectorの onLongPressにてコンテキストメニューを表示できないか調べてみた。
結果、Android: Opening a ContextMenu from onLongPress in custom WebView – Stack Overflowというずばりな質問が。
要は onLongPressにて Activity.openContextMenu(View v) を呼べばよいと。
なるほど、ずばりなメソッドを探し切れていなかったのか。
ただ、これだけだと Viewのほうでの長押し判定を殺せないので onTouchは GestureDetector.onTouchEventの戻り値の如何に関わらず trueを返してイベントを消化する必要がある。
さらに言えば、GestureDetector.LongPressは「最初の押し下げでタイマーをセットし、一定時間内にキャンセルされなかったら長押し」というロジックなので完全なイベントセットを与えない場合に意図しないタイミングで呼ばれることになる。
自アプリでは ScaleGestureDetectorに処理が移ったタイミングで GestureDetectorに MotionEvent.ACTION_CANCELを投げて処理をキャンセルさせたけど普通はどうするんだろう?

Leave a Reply

Your email address will not be published. Required fields are marked *

日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)