iOS開発者のAndroid開発入門ポップ色々その2(PopupWindow編)

botman3 Android
スポンサーリンク

はじめに

Android のダイアログとかポップぽいものを Popup としてまとめました。その2!!
今回は PopupWindow と ListPopupWindow について!

ソースは github にあげてます↓↓↓
ソース(github)

PopupWindow

指定の View を Popup で表示するやつ。(たぶん iOS でいうポップオーバーだと思う)

popup

実装

xml で表示したい View を作成して PopupWindowcontentView に設定し、幅、高さ、背景などを指定して showAsDropDownshowAtLocation で表示する。

popup_window.xml(PopupWindowで表示するView)

popup_background.xml(PopupWindowの背景用)

下記のように表示・非表示のアニメーション設定ができる

注意事項

PopupWindow の使用にはいくつか注意事項がある

幅・高さの指定

幅と高さの指定は dp に変換する必要があるので下記のように指定する。

クラッシュ防止

下記を指定していない場合、バックボタンで Activity が終了しその際に android.view.WindowLeaked でクラッシュしてしまう。。。

対策として PopupWindow をメンバ変数で保持して onDestroydismiss してやる。

参考

ListPopupWindow

ListView を Popup 表示するやつ。ドロップダウン用??(Spinner との使い分けはなんだろう??)

通常 カスタム1 カスタム2
list_pop list_pop2 list_pop3

実装

簡易実装

カスタム色々

View表示

setPromptView でリストの上か下に View を表示できる。デフォルトは上に表示で下に表示したい場合は promptPositionListPopupWindow.POSITION_PROMPT_BELOW を設定する。

表示位置調整

verticalOffsethorizontalOffset で表示位置を調整できる。たぶん Gravity はない。

背景設定

PopupWindow 同様 setBackgroundDrawable で背景を設定できる

注意事項

PopupWindow と同様。幅・高さの設定は dp 変換が必要。クラッシュ防止は onDestroydismiss してもクラッシュしてしまった。。。

とりあえず生成時に渡す ContextActivity から applicationContext にしたらクラッシュしなくなったけどたぶんこの解決策は違うと思う。。。

参考

おわりに

PopupWindow がわりと使い勝手よさそうだけどメンバ変数に持つのがなんかやだなぁ。ListPopupWindow はなんでクラッシュするんだろう??わかりません!!

コメント

タイトルとURLをコピーしました