よくあることです。
今回は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 の設定も必要です。
レイアウトによって使うクラスが違うとは。。。
こんなところにはまってしまってました。
皆様もお気をつけて。