2011年07月17日

PopupWindow ではまったこと


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);

てな、具合に。

こんなところで時間を取られるとは。。。。



posted by hikaru at 10:16| Comment(2) | Android | このブログの読者になる | 更新情報をチェックする
この記事へのコメント
まさに同じ状態で困っていたので、非常に助かりました。ありがとうございます。
Posted by mm at 2011年12月07日 17:09
mmさん、コメントありがとうございます。

すっかり、このブログのことを忘れてました。
忘れないようにしたにも関わらず、また同じところでつまずいて、ググったら自分のブログに来るというw

成長しないものですw
Posted by 管理人 at 2012年04月04日 21:05
コメントを書く
お名前:

メールアドレス:

ホームページアドレス:

コメント:

認証コード: [必須入力]


※画像の中の文字を半角で入力してください。