2011年09月03日

Android 表示位置ではまったこと

Android でまたまたはまりました。

よくあることです。

今回はViewなどを絶対値で表示するのにはまりました。
上とかセンターとかはgravityで設定するといいです。

しかし、上から100px、左から100pxと表示したい場合がやっかいでした。

直接、設定するメソッドはなく、LayoutParamsを設定し、setLayoutParamsメソッドで渡してあげる。

Button button = new Button(this);
LinearLayout.LayoutParams layoutParams = new LinearLayout.LayoutParams(-2, -2);
layoutParams.setMargins(100, 100, 100, 100);
button.setLayoutParams(layoutParams);

といった感じコーディングすればいい。
(ちなみに引数の -2 はLinearLayout.LayoutParams.WRAP_CONTENTのこと。)

なんだ簡単じゃんっと思うだろう。

しかし、ここに大きな落とし穴。

今回で言えば、Buttonがどのレイアウトの上に表示するかによって微妙に変える必要がある。

上記の例はLinearLayoutの場合である。

これがFrameLayoutだと微妙に違う。

Button button = new Button(this);
FrameLayout.LayoutParams layoutParams= new FrameLayout.LayoutParams(-2, -2);
layoutParams.gravity = Gravity.LEFT;
layoutParams.setMargins(100, 100, 100, 100);
button.setLayoutParams(layoutParams);


まず、クラスが違う!LayoutPramsを使うには使うのだが、FrameLayoutクラスのものを使うのである。

参りますね^^

そして、FrameLayoutではgravity の設定も必要です。

レイアウトによって使うクラスが違うとは。。。

こんなところにはまってしまってました。

皆様もお気をつけて。
posted by hikaru at 16:04| Comment(0) | Android | このブログの読者になる | 更新情報をチェックする

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

2011年07月02日

Android で [too many open files] のエラーが出た

Android で [too many open files] のエラーが出た時の対処法。

アンドロイドで実行検証を何度も繰り返していると、
インストール中に表題のようなエラーがたまに出ることがある。

起動中のアプリもないし、原因は不明。
なにかしらがバックグランドで動いていて、エラーが起きているのか。

いくつかコマンドを試してみたがわからず。

困ったあげくに、端末を再起動。

そしたら、無事、インストール成功。

うーーーん、強引な手段でした。
posted by hikaru at 09:30| Comment(0) | Android | このブログの読者になる | 更新情報をチェックする

広告


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

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

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