Androidのアプリ開発関連のブログ

イベント関連の問題点

先日よりFTPクライアントの制作を開始しているが、イベント関連の問題点に遭遇している。


まず、昨日ドラッグ&ドロップをやったんだが、
View.startDrag(引数);
でドラッグが始まり、ドロップ対象のViewにsetOnDragListenerでドロップ時の処理を設定しておけばできる。
startDragでドラッグが始まった際にタッチ状態でなければ即終了してしまうので、startDragはタッチ開始時やロングクリック時に開始する必要がある。
ロングでないクリック時だと、タッチ終了時にイベントが発生するので無理。

ListViewのアイテムをドラッグ&ドロップしたいのだが、
setOnItemLongClickListenerでstartDragすると、スムーズに行かないので、タッチイベントで開始も試みたのだが、
startDragでドラッグが開始するとListViewのスクロールができなくなってしまう・・・
スクロールができないのもまずいので、タッチ後の移動方向を取得して、ドロップ方向に移動しているならstartDrag。
とやってみたのだが、画面の向きが縦向きならレイアウトを上下に並べるつもりなんで、スクロール方向と同じことに気づいた。
どうにもならないと思うんで、タッチでのstartDragは諦めてロングタッチでstartDragするようにした・・・


次に今日遭遇した問題なんだが、LinearLayout全体に対してクリックイベントを設定したいんだが、
LinearLayoutの親が更にLinearLayoutになってて、クリックしたいLinearLayoutはlayout_weightで拡大するようになってる。
LinearLayoutでなくてFrameLayoutとか他のViewGroup(というか、すべてのView)でもダメみたいなんだが、
layout_weightで拡大すると見た目は拡大するが、クリック領域は拡大しないみたいで、
子要素のある領域以外だとクリックが反応しない。
試しにbackgroundつけてみたが、backgroundは拡大しているんだが、子要素のある部分しかクリック反応がない。
layout_weightせずにmatch_parentすれば全体が対象になるのかもしれないが、
AdMobつけるつもりなんで、AdMobが表示できるようにwrap_contentで領域を残しつつ拡大する必要がある。
Android4.2のエミュレータでテストしてるんで、別のバージョンなら問題なかったりするかもしれない。
まあ、諦めて別の操作方法を考えようと思う。