PopupWindow を使っていてはまったことをここに記す。
このクラス、使いかってがいいんだが悪いんだか。
いろいろサイトを調べて使ってはみたものの何も表示されない。。
どうもその原因は、
showAsDropDown(View anchor, int xoff, int yoff)
と
showAtLocation(View parent, int gravity, int x, int y)
の使い方に注意が必要らしい。
ちなみに、メソッドの説明
showAsDropDown(View anchor, int xoff, int yoff)
これは、anchor の下、左よりに表示しますよ。
左角を基準(0,0)として、(xoff,yoff)で指定できますよ。
という意味らしい(リファレンスより)
showAtLocation(View parent, int gravity, int x, int y)
これは、指定した位置に表示しますよ
リファレンスにはこれしか書かれていない。。。
個人的解釈ですが、
parentは表示させようとするViewクラスのことで、
普通、このメソッドを使うときは画面のどこに表示させたいか指定するはずのなので、
レイアウトの親クラスを指定します。
(例えば、LinearLayoutとか)
gravityは、Gravityクラスの定数を指定します。
主要なものを列挙
Gravity.TOP・・・・・・上部
Gravity.BOTTOM ・・・・下部
Gravity.LEFT・・・・・左
Gravity.RIGHT・・・・・右
Gravity.CENTER・・・・・中央
Gravity.CENTER_HORIZONTAL・・・・幅の中央
Gravity.CENTER_VERTICAL・・・・・高さの中央
Gravity.NO_GRAVITY・・・指定なし
上記で表示位置の指定ができ、
続く(x,y)は微細な位置の指定ができます。
とここまで書くと、結構カンタンじゃんと思われますし、思います。
でも、ここで問題が起きます!!
showAsDropDownでは表示されるのに
showAtLocationでは表示されない現象が起きてしまうのです。
なぜか、いろいろサイトなど調べてみると、
PopupWindowクラスの
setWindowLayoutMode(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT);
を使っていないといけないみたいなことが書いてあるが、
それでも、表示されません。
個人的に試した結果
PopupWindow の幅、高さを指定しなければいけなかったみたいです
例えば
setWidth(LayoutParams.WRAP_CONTENT);
setHeight(LayoutParams.WRAP_CONTENT);
てな、具合に。
こんなところで時間を取られるとは。。。。