Home Android AndroidのFrameLayoutに座標を指定してViewを配置する場合の注意点
Android

AndroidのFrameLayoutに座標を指定してViewを配置する場合の注意点

AndroidのFrameLayoutでハマったのでメモ。

FrameLayout内にViewを座標指定で配置する場合、配置するViewにGravityとMarginをセットする。
コードで書くとこんな感じ。

FrameLayout frameLayout = new FrameLayout(this);

LinearLayout linearLayout = new LinearLayout(this);
LayoutParams layoutParams = new LayoutParams(10, 10);
layoutParams.gravity = Gravity.TOP | Gravity.LEFT;
layoutParams.setMargin(10, 10, 0, 0);
linearLayout.setLayoutParams(layoutParams);
linearLayout.setBackgroundColor(Color.RED);

frameLayout.addView(linearLayout);

これで、10×10の赤色の四角が、左上から10pxマージンで配置される。
(普通は。)

ただし、ここでLayoutParamsを間違っていると思い切りハマる。

上記で使用すべきLayoutParamsはFrameLayout.LayoutParamsであって、
LinearLayout.LayoutParamsではない。
前者を使用するとGravityが効かなくなり、必然的にMarginも効かなくなる。

import android.widget.FrameLayout.LayoutParams;

するか、またはnewする際に明示的に

FrameLayout.LayoutParams layoutParams = new FrameLayout.LayoutParams(10, 10);

とすべし。

ちなみに、レイアウトxmlファイルで記述する場合は勝手にFrameLayout.LayoutParamsとして扱ってくれるので、
android:layout_gravityで指定しておけば問題無い。

Author

いじょる

フリー開発者。 Webサービス・スマホアプリ・ゲームなど作ってます。 新しいもの好き。 アイデアひねり出す人。 【当ブログ以外の活動】 ・Qiita

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

*