2013年9月24日火曜日

Android PopupWindowをモーダルにする方法

よく忘れるのでメモ

------

PopupWindowsetOutsideTouchable() で true をセットすると、ポップアップウィンドウの外側をタッチした時に閉じるようになります。

ただし、これだけだと外側をタッチしたときのイベント自体は依然として下のビューに伝わるので、困った状態になることがあります。

例えば、ボタンをタップしたときにポップアップウィンドウを表示する場合を考えてみましょう。

ポップアップウィンドウが表示されている状態でボタンの部分をタップすると、指をつけた瞬間にポップアップウィンドウが閉じ、指を離したときに再度ポップアップウィンドウが表示される、という動作になってしまいます。

これを避けるには、ポップアップウィンドウをモーダルにします。
モーダルにすると、外側をタッチしたときのイベントが下のビューに伝わらなくなります。

ポップアップウィンドウをモーダルにするには setFocusable()で true をセットします。

setModal()という名前じゃないのでわかりにくいです。
ListPopupWindowには、setModal() が用意されており、内部ではまさしく setFocusable() を呼んでいます。

http://tools.oesf.biz/android-4.2.0_r1.0/xref/frameworks/base/core/java/android/widget/ListPopupWindow.java#260 260 public void setModal(boolean modal) { 261 mModal = true; 262 mPopup.setFocusable(modal); 263 }

0 件のコメント:

コメントを投稿