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 | このブログの読者になる | 更新情報をチェックする

広告


この広告は60日以上更新がないブログに表示がされております。

以下のいずれかの方法で非表示にすることが可能です。

・記事の投稿、編集をおこなう
・マイブログの【設定】 > 【広告設定】 より、「60日間更新が無い場合」 の 「広告を表示しない」にチェックを入れて保存する。


×

この広告は180日以上新しい記事の投稿がないブログに表示されております。